Deserialize millisecond timestamp to java.time.Instant(将毫秒时间戳反序列化为java.time.Instant)
问题描述
我尝试使用Jackson读取一个JSON文件,并将其中一个存储为纪元毫秒的字段存储为JavaInstant
,但是反序列化的行为并不像预期的那样。
以下是我尝试读取时间戳时看到的情况:
1503115200000
Jackson正在将Instant
字段设置为+49601-10-28T16:00:00Z
。
这似乎是因为Jackson的默认设置是使用Instant.ofEpochSecond(Long l)
而不是Instant.ofEpochMilli(Long l)
读取时间戳。
是否可以将JacksonObjectMapper
设置为使用ofEpochMilli
方法?这是我的ObjectMapper
当前拥有的内容:
ObjectMapper om = new ObjectMapper()
.registerModule(new JavaTimeModule())
.configure(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS, false)
.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.setSerializationInclusion(Include.NON_NULL);
注意:
如果我将输入JSON更改为ISO日期(如2017-08-19T04:00:00Z
)或纪元秒(如1503115200
),则Instant
字段可以正确设置。
1503115200000
。
推荐答案
解决方案是将.configure(DeserializationFeature.READ_DATE_TIMESTAMPS_AS_NANOSECONDS, false)
添加到对象映射器。完整的ObjectMapper如下所示:
ObjectMapper om = new ObjectMapper()
.registerModule(new JavaTimeModule())
.configure(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS, false)
.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.configure(DeserializationFeature.READ_DATE_TIMESTAMPS_AS_NANOSECONDS, false)
.setSerializationInclusion(Include.NON_NULL);
这篇关于将毫秒时间戳反序列化为java.time.Instant的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:将毫秒时间戳反序列化为java.time.Instant


基础教程推荐
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01