Java 如何在使用Jackson反序列化OffsetDateTime时保留偏移量

Java 如何在使用Jackson反序列化OffsetDateTime时保留偏移量,java,json,jackson,java-time,Java,Json,Jackson,Java Time,在传入的JSON中,我有一个符合ISO8601的datetime字段,其中包含区域偏移量。我希望保留此偏移量,但不幸的是,在反序列化此字段时,Jackson默认为GMT/UTC(我从中了解) 我得到的是: java.lang.AssertionError: expected:<-04:00> but was:<Z> java.lang.AssertionError:应为:但为: 如何使返回的OffsetDateTime包含原始偏移量 我正在收听Jackson 2.8.

在传入的JSON中,我有一个符合ISO8601的datetime字段,其中包含区域偏移量。我希望保留此偏移量,但不幸的是,在反序列化此字段时,Jackson默认为GMT/UTC(我从中了解)

我得到的是:

java.lang.AssertionError: expected:<-04:00> but was:<Z>
java.lang.AssertionError:应为:但为:
如何使返回的OffsetDateTime包含原始偏移量

我正在收听Jackson 2.8.3。你能试试吗

objectMapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);
?


根据您链接的常见问题,它应该为您提供格式
1970-01-01T00:00:00.000+0000
。此格式包含时区偏移量(
+0000
)。

将对象映射器更改为此格式,以禁用将日期调整为上下文时区

objectMapper = Jackson2ObjectMapperBuilder.json()
            .modules(new JavaTimeModule())
            .featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE)
            .build();

它已经通过Jackson2ObjectMapperBuilder启用。幸运的是,我找到了一个有效的解决方案。太棒了,谢谢!在深入研究了杰克逊的内部结构后,我自己才发现了这一点。
objectMapper = Jackson2ObjectMapperBuilder.json()
            .modules(new JavaTimeModule())
            .featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE)
            .build();