杰克逊ObjectMapper错误地序列化了字符串日期

问题描述

在进行序列化时,FasterXML ObjectMapper设置duedate时有问题。映射时,updatedcreated很好。唯一的区别是不包括也不提供小时数。

"fields": {
    "updated": "2020-09-01T06:18:36.000+0900","duedate": "2020-08-04","created": "2020-07-31T08:25:54.000+0900"
}

这是我的代码

ObjectMapper mapper = new ObjectMapper();
Fields fields = mapper.readValue(json,Fields.class);
System.out.println(fields.getFields().getDuedate());
Result: Mon Aug 03 19:00:00 CDT 2020

由于您一天可以看到它,不知道时间从何而来。结果应为:Tue Aug 04 00:00:00 CDT 2020

解决方法

Java默认采用本地时区,并转换本地时区中的所有日期(如果您使用的是jdk8及更高版本),则需要保留您需要使用的日期:

@JsonDeserialize(using = LocalDateDeserializer.class)
private LocalDate duedate;

进行此更改后,您的Ar将保留日期而不进行转换,在其他情况下,您可以使用OffsetDateTimeZonedDateTime保留原始日期。

我希望LocalDate为您工作。