Java Jackson ObjectMapper序列化的字符串日期不正确

Java Jackson ObjectMapper序列化的字符串日期不正确,java,json,date,jackson,fasterxml,Java,Json,Date,Jackson,Fasterxml,序列化时,FasterXML ObjectMapper设置的duedate不正确更新的和创建的都可以。唯一的区别是不包括时间,也不提供时间 "fields": { "updated": "2020-09-01T06:18:36.000+0900", "duedate": "2020-08-04", "created": "2020-07-31T

序列化时,FasterXML ObjectMapper设置的
duedate
不正确<映射时,代码>更新的和创建的都可以。唯一的区别是不包括时间,也不提供时间

"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将保留日期而不进行转换,并且您可以在其他情况下使用
OffsetDateTime
ZonedDateTime
,以保留原始日期


我希望
LocalDate
对您有用。

从输出中,您可以看到它解析了CDT时区中的日期(可能是您服务器的时区?),仅从JSON来看,它完全不清楚到期日期应该是什么。我假设+0900是因为其他时间。如果是这种情况,您可以编写一个自定义反序列化方法来跨这些字段复制时区
java.util.Date
toString
方法在默认时区中显示日期。