gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:31:08 27 4
gpt4 key购买 nike

@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_TIMESTAMPSDeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE 并启用 SerializationFeature.WRITE_DATES_WITH_ZONE_ID 也无济于事。

显然它真的想要像 2015-10-20T11:00:00Z 这样没有时区的 INSTANT 格式。这对于 OffsetDateTime 有点无用,因为重点是使用时区(或偏移量)。

有什么想法吗?

完全披露:我有一个 issue在他们的 Github 上打开。

最佳答案

这是一个偏移量缺少零的问题,即 8:30 而不是 08:30。显然 DateTimeFormatter#ISO_OFFSET_DATE_TIME 对此非常严格。我检查了所有 3 个 java.time.format.ResolverStyle 并且在缺少前导零时没有一个工作。您可能认为 ResolverStyle.LENIENTResolverStyle.SMART 会起作用,而 ResolverStyle.STRICT 可能会失败,但不会。

感谢 Jackson 开发团队的成员。

关于json - Jackson JSR-310 模块无法反序列化最简单的 OffsetDateTime 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33234245/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com