【问题标题】:Change application.yaml in Springboot to return dates as longs instead of timestamps在 Spring Boot 中更改 application.yaml 以将日期返回为 longs 而不是时间戳
【发布时间】:2020-07-13 21:03:39
【问题描述】:

我们有一个 Springboot 项目,我们的生产应用程序类包含以下注释:@EnableWebMvc(),因此对端点的调用返回以下内容。请注意,日期作为 long 值返回。

{
 "expirationDate": 1597291200000,
 "dateOfBirth": 271828800000 
}

但是,在应用程序类的开发分支中,我们删除了该注释,并且在调用相同的端点后获得了以下响应。请注意,现在日期作为时间戳返回。如果没有 @EnableWebMvc() 注释,我们如何更改我们的 application.yaml 以便接收日期。对我们来说,最好的解决方案是在 application.yaml 中,但欢迎任何其他建议。

{
  "expirationDate": "2020-08-13T04:00:00.000+0000",
  "dateOfBirth": "1978-08-13T04:00:00.000+0000"
}

【问题讨论】:

  • 你说 double 多次但你的意思是 long 吗?
  • 您能否为这个端点展示您的控制器?
  • 是的!对不起,谢谢你,我错过了,我的意思是很久了。我们确信问题是由于注释造成的,一旦我们将其添加到开发中,错误就会得到修复。但是,返回的数据来自我们无法控制的来源。在帖子中,我添加了控制器。 @杰森
  • 用处理请求的控制器更新主帖。
  • 这就是您从客户端调用它的方式。我需要查看服务器如何生成该响应。我需要MVC模式中的控制器

标签: java spring spring-boot spring-mvc jackson


【解决方案1】:

这可以使用 Jackson 提供的 JsonFormat 注释来实现。在您作为响应返回的相应实体类中,使用 JsonFormat 注释字段并提供形状注释 Shape.NUMBER。

        @JsonFormat(shape = JsonFormat.Shape.NUMBER)
        final ZonedDateTime expirationDate;

        @JsonFormat(shape = JsonFormat.Shape.NUMBER)
        final ZonedDateTime dateOfBirth;

这也可以通过属性文件全局实现。

属性

spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS = true

YAML

spring:
  jackson:
    serialization:
      WRITE_DATES_AS_TIMESTAMPS: true

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-14
    • 2016-12-22
    • 1970-01-01
    • 2022-01-14
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多