java - 在 Spring Boot 中使用 RestTemplate 时,Long 值始终为 null

标签 java spring spring-boot resttemplate

我正在尝试解析这个 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 时,我得到了 null,这也显示为代码中的注释。所以我能够完美地解析某些部分,但无法解析某些部分。我不知道我做错了什么,所以任何帮助将不胜感激。谢谢

最佳答案

@SerializedName 是一个 Gson 注释。 Spring 通常使用 Jackson。 Jackson 的注释是 @JsonProperty("name")

关于java - 在 Spring Boot 中使用 RestTemplate 时,Long 值始终为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59883367/

相关文章:

java - 在 Docker 中使用 Spring Boot Actuator?

java - 如何在整个 TestNG 套件中使用单个 Spring ApplicationContext?

javascript - 在 spring boot 中使用 javascript 获取 application.properties 文件中的值

java : search for a word in a text and give its line

java - 如何在Java中的其他方法中删除对象?

java - View 、DAO、服务和 Controller 的基本 Hibernate 和 Spring MVC 集成

java - 使用 Maven 编译成 WAR 时包含非 java 文件

java.lang.NoClassDefFoundError : org/springframework/web/util/UriTemplateHandler 错误

java - 如何将 Joda LocalDate 转换为 java.util.Date?

java - 通过 CLI 在 java 中传递参数