@Test
public void testJacksonOffsetDateTimeDeserializer() throws IOException {
ObjectMapper mapper = new ObjectMapper().registerModule(new JavaTimeModule());
String json = ""2015-10-20T11:00:00-8:30"";
mapper.readValue(json, OffsetDateTime.class); // boom!
}
java.time.format.DateTimeParseException: Text '2015-10-20T11:00:00-8:30' could not be parsed at index 19
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
使用2.6.3版本
没有帮助,即使我禁用SerializationFeature.WRITE_DATES_AS_TIMESTAMPS
, DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE
和启用SerializationFeature.WRITE_DATES_WITH_ZONE_ID
。
显然它真的想要像2015-10-20T11:00:00Z这样的即时格式,没有时区。这对于OffsetDateTime来说有点没用,因为整个要点是使用时区(或偏移量)。
任何想法?
全面披露:我在他们的Github上有一个问题。
这是一个偏移量缺少零的问题,即8:30
而不是08:30
。显然DateTimeFormatter#ISO_OFFSET_DATE_TIME
对此很严格。我检查了所有3个java.time.format.ResolverStyle
,当前导零丢失时,没有一个工作。您可能会认为ResolverStyle.LENIENT
或ResolverStyle.SMART
会工作,而ResolverStyle.STRICT
可能会失败,但不。
感谢Jackson开发团队。