微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Jackson将ISO8601格式的日期时间反序列化为Java8 Instant

如何解决Jackson将ISO8601格式的日期时间反序列化为Java8 Instant

您需要通过XXX在您的modell类中设置显式时区:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX")

(请参阅:https ://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html)

解决方法

我正在尝试java.time.Instant使用Jackson 将ISO8601格式的日期反序列化为Java8
。我向ObjectMapper注册了JavaTimeModule,并关闭了该WRITE_DATES_AS_TIMESTAMPS设置。

但是,如果尝试反序列化2016-03-28T19:00:00.000+01:00,它将无法正常工作,因为JavaTimeModule似乎只会反序列化具有UTC时区偏移量的日期时间(例如2016-03-28T18:00:00.000Z)。然后,我尝试使用如下@JsonFormat注释:

@JsonFormat(shape=JsonFormat.Shape.STRING,pattern="yyyy-MM-dd'T'HH:mm:ss.SSSZ",timezone = "UTC")

像这样:

@JsonFormat(shape=JsonFormat.Shape.STRING,timezone = JsonFormat.DEFAULT_TIMEZONE)

但是,这些都不起作用,我得到一个例外:

com.fasterxml.jackson.databind.JsonMappingException: Unsupported field: YearOfEra (through reference chain: org.example.Article["date"])

这意味着将忽略timezone参数,并且日期时间格式化程序不知道如何格式化没有时区的Instant。

有没有一种方法可以java.time.Instant使用Jackson和JavaTimeModule反序列化不在UTC时区偏移量到Java
8的ISO8601字符串,而无需编写自定义反序列化器?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。