我试图反序列化一个ISO8601格式的日期到Java8即时使用杰克逊。我用ObjectMapper注册了JavaTimeModule,关闭了WRITE_DATES_AS_TIMESTAMPS。杰克森反序列化ISO8601 fromated日期时间到Java8即时
但是,如果有人试图反序列化2016-03-28T19:00:00.000 + 01:00,它将不起作用,因为JavaTimeModule似乎只会反序列化使用UTC时区偏移格式化的日期时间(例如2016-03 -28T18:00:00.000Z)。
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd'T'HH:mm:ss.SSSZ", timezone = "UTC")
而像这样:然后我用@JsonFormat注解这样的尝试
@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。
有没有一种方法来反序列化ISO 8601字符串,该字符串不在UTC时区偏移到Java 8使用Jackson和JavaTimeModule实现即时编写而无需编写自定义反序列化程序?
奇怪,我预计这个错误'无法解析日期值 '2016-03-28T19:00:00.000 + 01:00'(格式为:“YYYY-MM-dd'T 'HH:mm:ss.SSSZ“):无法解析的日期:”2016-03-28T19:00:00.000 + 01:00“'并且在尝试了您的代码之后,我在这两种情况下都遇到了这种错误。格式不匹配...您是否尝试过没有任何注释? –
或使用此模式:yyyy-MM-dd'T'HH:mm:ss.SSSXXX(请参阅:https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html) –
没有任何注释它的作品,但只有当偏移量指定为Z.它不适用于+0100或+01:00。我尝试了你的格式,我仍然得到Unsupported字段:YearOfEra异常,表明反序列化器的格式化程序没有配置时区(由于某些原因,即使偏移量在字符串中指定且Instant已完全定义,java 8 fromatter也需要TZ) 。 –