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

6 浏览
0 Comments

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

我正在尝试使用Jackson将ISO8601格式的日期反序列化为Java8中的java.time.Instant。我使用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, pattern="yyyy-MM-dd'T'HH:mm:ss.SSSZ", timezone = JsonFormat.DEFAULT_TIMEZONE)

然而,这两种方式都不起作用,我会得到一个异常:

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

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

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

0