java - Spring Boot : Default serialization for java. time.Duration 从 String 更改为 Number

标签 java spring-boot serialization jackson

我们最近从 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/

相关文章:

java - 无法在 Kotlin 中调用 FileProvider 的 getUriForFile

java - 从本地方法返回由 JNI 创建的本地引用

java - 如何使用 Spring Boot 在 Spring Batch 中以不同顺序读取 csv 列

spring-boot - @Column (Cassandra) 注释被 Spring Boot 2.5.0 忽略(适用于 2.4.6)

java - 如何避免 Websphere 应用程序服务器上具有复杂参数的 JMX 调用中的 ClassCastException

java - Apache Spark Lambda 表达式 - 序列化问题

java - 将包含算术符号的字符串转换为整数值

java - 命中 'mvn test' 后运行哪些测试?

spring-boot - WSL2 中的 IntelliJ Idea 错误 : export: ProgramFiles(x86): bad variable name

java - classCounter 变量会发生什么?