【问题标题】:Is Default serialization format of Date has changed with recent Spring boot versions/Jackson Versions?Date 的默认序列化格式是否随着最近的 Spring Boot 版本/Jackson 版本而改变?
【发布时间】:2020-10-20 17:39:12
【问题描述】:

我正在将 SpringBoot 版本从 2.2.2.RELEASE 更新到 2.3.1.RELEASE。突然,我所有 API 响应的所有日期格式都发生了变化(在时区表示部分)。

+0000+00:00

"timestamp": "2020-05-19T05:46:49.469+0000" -  2.2.2.RELEASE

"timestamp": "2020-06-30T09:55:23.014+00:00" - 2.3.1.RELEASE

这是我的简单 POJO:我没有为日期字段添加任何 @JsonFortmat 配置。


@NoArgsConstructor
@AllArgsConstructor
@Getter
public class BuildInfo{
    private String message;
    private Date timestamp;
}

和我的控制器方法

    @GetMapping(value = "/buildinfo", produces = "application/json")
    ResponseEntity<BuildInfo> getBuildInfo();

我没有添加任何序列化/反序列化逻辑,我只使用 SpringBoot 的默认行为进行开发。我正在尝试搜索有关此更改的任何发布文档,但找不到任何内容。

以下更改,我可以执行以适应这些更改

  1. 在每个日期字段中使用带有自定义模式的 @JsonFormat 注释(但我不能这样做,因为这是客户端库)

       @JsonFormat(pattern="yyyy-MM-dd'T'HH:mm:ss.SSSZ")
       private Date timestamp;
    
  2. 在应用层注入Jackson2ObjectMapperBuilderCustomizer

 @Bean
 public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() {
     return builder -> builder.simpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
 }

但我想缩小格式更改的根本原因?从哪个版本的 Jackson/Spring 库开始?

【问题讨论】:

标签: spring-boot jackson


【解决方案1】:

来自jackson-databind 2.11.0.(diff)

所以,这种行为似乎是 Spring Boot 2.3.0 或更高版本。

【讨论】:

    【解决方案2】:

    您还可以使用以下 Spring Boot 属性来格式化您的 JSON 日期:spring.jackson.date-format。请注意,这只适用于 java.util.Date 和 java.util.Calendar 对象。

    【讨论】:

      【解决方案3】:

      Spring Boot 2.3.0 RN 的 section stating the changes in Jackson version 中记录了更改,其中明确提到“对 java.util.Date 和 java.util.Calendar 的默认格式的更改”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-05-04
        • 2018-05-21
        • 2020-10-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-01
        • 2020-05-25
        相关资源
        最近更新 更多