gpt4 book ai didi

java - Jackson ConvertValue 不使用 JavaTimeModule

转载 作者:行者123 更新时间:2023-11-30 05:55:03 25 4
gpt4 key购买 nike

如果我创建一个 POJO 类并使用 mapper.writeValueAsString() 将整个对象转换为 Json方法,或者让 Spring 处理转换,JavaTimeModule正确使用,如果我的 POJO 有 OffsetDateTime其中,它将被转换为类似 2018-10-16T13:49:34.564748+02:00 的字符串。

对于某些场景,我需要使用映射器的T convertValue(Object fromValue, Class<T> toValueType)方法并构建 ObjectNode用手。该方法不会转换 OffsetDateTime对象的方式与 writeValueAsString 相同.

我像这样构造我的 Jackson 映射器:

ObjectMapper defaultMapperObj = new ObjectMapper();
defaultMapperObj.registerModule(new GuavaModule());
defaultMapperObj.registerModule(new Jdk8Module());
defaultMapperObj.registerModule(new JavaTimeModule());
defaultMapperObj.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

使用映射器,我什至可以轻松地将列表转换为其 Json 字符串:

mapper.convertValue(
Arrays.asList(1,2,23), JsonNode.class
)

结果:

ArrayNode: [1,2,23]

但是如果我这样称呼:

mappper.convertValue(OffsetDateTime.now(), JsonNode.class)

我得到一个DecimalNode :1542287917.2141993

最佳答案

来自JavaTimeModule文档:

Most java.time types are serialized as numbers (integers or decimals as appropriate) if the SerializationFeature.WRITE_DATES_AS_TIMESTAMPS feature is enabled, and otherwise are serialized in standard ISO-8601 string representation. [...]

因此,要达到所需的结果,请禁用 SerializationFeature.WRITE_DATES_AS_TIMESTAMPS您的 ObjectMapper 中的功能实例:

mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

关于java - Jackson ConvertValue 不使用 JavaTimeModule,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53320401/

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