【发布时间】:2020-03-07 22:17:14
【问题描述】:
我们最近从 Spring Boot 2.1.9 升级到了 2.2.1,这导致我们的测试失败。调查导致java.time.Duration 类型现在默认序列化不同。我们现在得到的是"900.0",而不是 JSON 消息中的字符串 "PT15M"。 POJO 的定义是这样的
@JsonProperty(required = true, value = "duration")
@NotNull
private final Duration duration;
现在的问题是,是否有一些配置属性可以用来获取“旧”行为。我知道我们也可以添加注释
@JsonFormat(shape = JsonFormat.Shape.STRING)
但我更喜欢通过配置来获得它。
【问题讨论】:
-
您是否为此实现了自己的格式化程序?
-
98% 确定这是 Jackson 序列化标志; Boot 属性中有关于如何配置它们的通用文档。
-
没有自己的格式化程序,如果您添加注释,它可以开箱即用,使用 PT15M 使用这种格式
-
好消息是,我们同时找到了属性,它是 spring.jackson.serialization.write-durations-as-timestamps=false 。我是直接看spring.jackson的,没有进入序列化命名空间……
-
尽管如此,问题仍然是为什么默认行为发生了变化。
标签: java spring-boot serialization jackson