Длинное значение всегда равно нулю при использовании RestTemplate в Spring Boot - PullRequest
1 голос
/ 23 января 2020

Я пытаюсь разобрать это json

{
    "total_count": 3,
    "offset": 0,
    "limit": 50,
    "notifications": [
        {

            "isEdge": false,
            "large_icon": "",
            "priority": 10,
            "queued_at": 1579590097,
            "remaining": 0,
            "send_after": 1579590097,
            "completed_at": 1579590110,
            "small_icon": "",
            "successful": 1,
            "received": 1,
            "tags": null,
            "filters": null,
            "template_id": null,
            "ttl": null,
            "url": "",
            "contents": {
                "en": "MoMo House presents MoMo eating competition. Come join us on Jan 26th 
                      for the biggest MoMo eating competition ever."
            }
            "web_url": null,
            "app_url": null,
            "web_buttons": null,
            "web_push_topic": null,
            "wp_sound": "",
            "wp_wns_sound": "",
            "ios_attachments": null
        }
]
}

Это мой код, чтобы разобрать его

public ResponseEntity<HashMap<String,List<Notification>>> getAllNotifications(){
        RestTemplate restTemplate = new RestTemplate();
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.add("Authorization",Constants.ONESIGNAL_REST_KEY);
        HttpEntity<String> entity = new HttpEntity<String>("body", httpHeaders);
        ResponseEntity<OneSignalResponse> oneSignalResponseResponseEntity = restTemplate.exchange(Constants.ONESIGNAL_URL, HttpMethod.GET,entity,OneSignalResponse.class);
        OneSignalResponse oneSignalResponse=oneSignalResponseResponseEntity.getBody();

        System.out.println("Title "+oneSignalResponse.getNotifications().get(0).getHeadings().getEn());

        List<Notification> notifications = new ArrayList<>();
        for(NotificationsItem oneSig : oneSignalResponse.getNotifications()){
            Notification notification = new Notification();
            notification.setId(oneSig.getId());
            notification.setTitle(oneSig.getHeadings().getEn());
            notification.setMessage(oneSig.getContents().getEn());

            System.out.println("value of sent time "+oneSig.getCompletedAt()); //this is null
            Date date = new Date(sentTime);
            notification.setDate(localDateTime.toString());

            notifications.add(notification);
        }

        HashMap<String,List<Notification>> hashMap = new HashMap<>();
        hashMap.put("notifications",notifications);

        return new ResponseEntity<>(hashMap, HttpStatus.OK);

    }

И это мой POJO

public class NotificationsItem{

    @SerializedName("isEdge")
    private boolean isEdge;

    @SerializedName("delayed_option")
    private String delayedOption;

    @SerializedName("queued_at")
    private int queuedAt;

    @SerializedName("failed")
    private int failed;

    @SerializedName("priority")
    private int priority;

    @SerializedName("remaining")
    private int remaining;

    @SerializedName("tags")
    private Object tags;

    @SerializedName("canceled")
    private boolean canceled;

    @SerializedName("chrome_icon")
    private String chromeIcon;

    @SerializedName("completed_at")
    private Object completedAt;

    @SerializedName("isWP")
    private boolean isWP;

    @SerializedName("send_after")
    private int sendAfter;

    @SerializedName("adm_sound")
    private String admSound;

    @SerializedName("chrome_web_image")
    private String chromeWebImage;

    @SerializedName("contents")
    private Contents contents;

    @SerializedName("converted")
    private int converted;

    @SerializedName("android_visibility")
    private int androidVisibility;

    @SerializedName("headings")
    private Headings headings;

    @SerializedName("adm_group")
    private String admGroup;

    @SerializedName("chrome_web_badge")
    private String chromeWebBadge;

    @SerializedName("spoken_text")
    private SpokenText spokenText;

    @SerializedName("ios_badgeCount")
    private int iosBadgeCount;

    @SerializedName("isChrome")
    private boolean isChrome;

    @SerializedName("alexa_ssml")
    private Object alexaSsml;

    @SerializedName("alexa_display_title")
    private Object alexaDisplayTitle;

    @SerializedName("android_accent_color")
    private String androidAccentColor;

    @SerializedName("android_group")
    private String androidGroup;

    @SerializedName("include_external_user_ids")
    private Object includeExternalUserIds;

    @SerializedName("isAdm")
    private boolean isAdm;

    @SerializedName("successful")
    private int successful;

    @SerializedName("web_push_topic")
    private Object webPushTopic;

    @SerializedName("adm_large_icon")
    private String admLargeIcon;

    @SerializedName("content_available")
    private boolean contentAvailable;

    @SerializedName("adm_small_icon")
    private String admSmallIcon;

    @SerializedName("buttons")
    private Object buttons;

    @SerializedName("app_url")
    private Object appUrl;

    @SerializedName("ios_badgeType")
    private String iosBadgeType;

    @SerializedName("delivery_time_of_day")
    private String deliveryTimeOfDay;

    @SerializedName("large_icon")
    private String largeIcon;

    @SerializedName("big_picture")
    private String bigPicture;

    @SerializedName("filters")
    private Object filters;

    @SerializedName("ttl")
    private Object ttl;

    @SerializedName("url")
    private String url;

    @SerializedName("include_player_ids")
    private Object includePlayerIds;

    @SerializedName("android_led_color")
    private String androidLedColor;

    @SerializedName("isWP_WNS")
    private boolean isWPWNS;

    @SerializedName("web_url")
    private Object webUrl;

    @SerializedName("adm_group_message")
    private AdmGroupMessage admGroupMessage;

    @SerializedName("adm_big_picture")
    private String admBigPicture;

    @SerializedName("small_icon")
    private String smallIcon;

    @SerializedName("template_id")
    private Object templateId;

    @SerializedName("web_buttons")
    private Object webButtons;

    @SerializedName("isAndroid")
    private boolean isAndroid;

    @SerializedName("isIos")
    private boolean isIos;

    @SerializedName("errored")
    private int errored;
    //getters setters
}

Поскольку json велико, я включил только те, которые имеют значение, и POJO может и не быть соответствующим образом здесь.

Поэтому, когда я вызываю метод, я получаю значение contents но я получаю нулевое значение, когда пытаюсь получить completedAt, это также отображается как комментарий в коде. Таким образом, я могу разобрать некоторые части отлично, но я не могу разобрать некоторые. Я не знаю, что я делаю неправильно, поэтому любая помощь будет высоко оценена. Спасибо

Ответы [ 2 ]

2 голосов
/ 23 января 2020

@SerializedName - аннотация Gson. Весна обычно использует Джексона. Аннотация Джексона для этого будет @JsonProperty("name").

0 голосов
/ 23 января 2020

Вы должны изменить тип данных для переменной completedAt

@SerializedName("completed_at")
private Object completedAt;

На

@SerializedName("completed_at")
private Long completedAt;
...