为什么杰克逊将 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
我想了解为什么 Jackson 在 spring 集成测试中获取 MvcResult 时将 ZonedDateTime 转换为 Decimal?
这是预计日期:2019-10-01T10:10:44+02:00[Europe/Paris] 实际结果:1572426644.000000000
我通过在集成测试中注入 MappingJackson2HttpMessageConverter
来阻止转换
MockMvcBuilders.standaloneSetup(myController).setMessageConverters(mappingJackson2HttpMessageConverter).build();
以下是对您的问题给出精确解答的答案:
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