【问题标题】:Why does jackson convert ZonedDateTime to decimal?为什么杰克逊将 ZonedDateTime 转换为十进制?
【发布时间】:2020-02-07 21:08:13
【问题描述】:

我试图理解为什么 Jackson 在 Spring 集成测试中获取 MvcResult 时将 ZonedDateTime 转换为 Decimal?

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

【问题讨论】:

标签: java spring jackson zoneddatetime


【解决方案1】:

如果你使用 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

【讨论】:

  • 我会尽快尝试这个解决方案 :) 并给你我的反馈
  • 不错! :) 所以你在这里有三种可能的解决方案作为答案。请你接受其中之一吗?
【解决方案2】:

以下是为您的问题提供精确解决方案的答案:Spring Data JPA - ZonedDateTime format for JSON serialization。简而言之,您需要如下注释 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>

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-03-13
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 2017-10-03
      • 1970-01-01
      • 2021-07-13
      • 2019-05-18
      相关资源
      最近更新 更多