我正在尝试使用 Jackson 读取 JSON 文件并将以纪元毫秒形式存储的字段之一存储为 JavaInstant
,但是反序列化的行为并不如预期。
这是我在尝试读取时间戳时看到的内容:
1503115200000
杰克逊正在设定Instant
字段为+49601-10-28T16:00:00Z
.
这似乎发生是因为 Jackson 的默认设置是读取时间戳Instant.ofEpochSecond(Long l)
代替Instant.ofEpochMilli(Long l)
.
有没有办法设置杰克逊ObjectMapper
使用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);
Note
如果我将输入 JSON 更改为 ISO 日期,例如2017-08-19T04:00:00Z
或纪元秒,例如1503115200
the Instant
字段能够正确设置。
不幸的是,JSON 输入必须是纪元毫秒,例如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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)