Jackson JSR-310模块无法反序列化最简单的OffsetDateTime格式


@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.LENIENTResolverStyle.SMART会工作,而ResolverStyle.STRICT可能会失败,但不。

感谢Jackson开发团队。

最新更新