我们最近从 Spring Boot 2.1.9 升级到 2.2.1,这导致我们的测试失败。调查结果是java.time.Duration
type 现在默认以不同的方式序列化。而不是拥有字符串 "PT15M"
在 JSON 消息中,我们现在得到 "900.0"
. POJO 定义看起来像这样
@JsonProperty(required = true, value = "duration")
@NotNull
private final Duration duration;
现在的问题是,是否有一些配置属性可以用来获取“旧”行为。我知道我们也可以添加注释
@JsonFormat(shape = JsonFormat.Shape.STRING)
但我更喜欢通过配置来获得它的方法。
最佳答案
当您将 spring-boot 的版本从 2.1.9 更改为 2.2.1 时,Jackson 的版本也发生了变化。从 Spring-boot 版本 2.2 开始,Jackson 版本更改为 2.10。作为此 Jackson 版本更改的一部分的更改之一是使用标志 SerializationFeature.WRITE_DURATIONS_AS_TIMESTAMPS
用于序列化持续时间时间戳而不是早期的 WRITE_DATES_AS_TIMESTAMPS
.
通过将以下属性添加到 application.properties 服务(和序列化功能)将像 2.2 之前一样运行
spring.jackson.serialization.write-durations-as-timestamps=false
Springboot 2.2 Changelist
jackson 2.10 changelist
jackson Issue tracker
关于java - Spring Boot : Default serialization for java. time.Duration 从 String 更改为 Number,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58814711/