【发布时间】:2018-01-27 12:09:39
【问题描述】:
我正在尝试使用 Jackson 读取 JSON 文件并将其中一个字段存储为一个纪元毫秒作为 Java Instant,但是反序列化的行为不符合预期。
这是我在尝试读取时间戳时看到的:
1503115200000
Jackson 将 Instant 字段设置为 +49601-10-28T16:00:00Z。
这似乎是因为 Jackson 的默认设置是使用 Instant.ofEpochSecond(Long l) 而不是 Instant.ofEpochMilli(Long l) 读取时间戳。
有没有办法将 Jackson 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);
注意
如果我将输入 JSON 更改为 ISO 日期,例如 2017-08-19T04:00:00Z 或纪元秒,例如 1503115200,Instant 字段能够正确设置。
不幸的是,JSON 输入必须是纪元毫秒,例如1503115200000。
【问题讨论】:
标签: java serialization jackson deserialization java-time