gpt4 book ai didi

java - 将毫秒时间戳反序列化为 java.time.Instant

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:14:59 25 4
gpt4 key购买 nike

我正在尝试使用 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 .

最佳答案

解决方案是将 .configure(DeserializationFeature.READ_DATE_TIMESTAMPS_AS_NANOSECONDS, false) 添加到 ObjectMapper。完整的 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 - 将毫秒时间戳反序列化为 java.time.Instant,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45762857/

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