为什么杰克逊将 ZonedDateTime 转换为十进制?

Why does jackson convert ZonedDateTime to decimal?

我想了解为什么 Jackson 在 spring 集成测试中获取 MvcResult 时将 ZonedDateTime 转换为 Decimal?

这是预计日期:2019-10-01T10:10:44+02:00[Europe/Paris] 实际结果:1572426644.000000000

我通过在集成测试中注入 MappingJackson2HttpMessageConverter 来阻止转换

MockMvcBuilders.standaloneSetup(myController).setMessageConverters(mappingJackson2HttpMessageConverter).build();

以下是对您的问题给出精确解答的答案:。简而言之,您需要按如下方式注释您的 ZonedDateTime。

ZonedDateTime time = ZonedDateTime.now();

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
public ZonedDateTime getTime() {
    return time;
}

您可能还需要添加 JSR-310 的依赖项

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.6.0</version>
</dependency>

如果使用Spring Boot,可以用下面的更通用的方式解决属性:

spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false

这样您就不需要为每个日期字段指定 JsonFormat。

如果您还想全局自定义日期格式,请使用 属性:

spring.jackson.date-format

来源:https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html