Date 的默认序列化格式是否随着最近的 Spring 启动版本/杰克逊版本而更改?



我正在将 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-databind 2.11.0.(差异(

春季启动 2.2.0
  • :2.10.0
  • 春季启动 2.2.8:2.10.4
  • 春季启动 2.3.0:2.11.0

因此,似乎此行为是 Spring Boot 2.3.0 或更高版本。

更改记录在Spring Boot 2.3.0 RN中,在说明Jackson版本中更改的部分中,其中明确提到"对java.util.Date和java.util.Calendar的默认格式的更改">

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

最新更新