如果我创建一个POJO类,并使用mapper.writeValueAsString()
方法将整个对象转换为Json,或者让Spring处理转换,则将正确使用JavaTimeModule
;如果我的POJO具有{{1 }},它将转换为类似OffsetDateTime
的字符串。
在某些情况下,我需要使用映射器的2018-10-16T13:49:34.564748+02:00
方法并手动构建一个T convertValue(Object fromValue, Class<T> toValueType)
。该方法不会像转换ObjectNode
那样转换OffsetDateTime
对象。
我像这样构造我的Jackson映射器:
writeValueAsString
使用映射器,我可以轻松地将List转换为他们的Json字符串:
ObjectMapper defaultMapperObj = new ObjectMapper();
defaultMapperObj.registerModule(new GuavaModule());
defaultMapperObj.registerModule(new Jdk8Module());
defaultMapperObj.registerModule(new JavaTimeModule());
defaultMapperObj.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
结果:
mapper.convertValue(
Arrays.asList(1,2,23), JsonNode.class
)
但是如果我这样称呼:
ArrayNode: [1,2,23]
我得到一个mappper.convertValue(OffsetDateTime.now(), JsonNode.class)
:DecimalNode
答案 0 :(得分:1)
摘自JavaTimeModule
文档:
如果启用了
java.time
功能,大多数SerializationFeature.WRITE_DATES_AS_TIMESTAMPS
类型将被序列化为数字(适当时为整数或小数),否则将以标准ISO-8601字符串表示形式进行序列化。 [...]
因此,要获得所需的结果,请在您的SerializationFeature.WRITE_DATES_AS_TIMESTAMPS
实例中禁用ObjectMapper
功能:
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);