Spring Boot:java.time.Duration的默认序列化从字符串更改为数字

我们最近从Spring Boot 2.1.9升级到2.2.1,这导致我们的测试失败。经调查得出的结果是,java.time.Duration类型现在默认情况下以不同的方式序列化。现在,我们得到了"PT15M",而不是在JSON消息中包含字符串"900.0"。 POJO定义看起来像这样

@JsonProperty(required = true,value = "duration")
@NotNull
private final Duration duration;

现在的问题是,是否可以使用某些配置属性来获得“旧”行为。我知道我们也可以添加注释

@JsonFormat(shape = JsonFormat.Shape.STRING)

但是我更希望通过配置来获得它。

yshvip 回答:Spring Boot:java.time.Duration的默认序列化从字符串更改为数字

当您将spring-boot的版本从2.1.9更改为2.2.1时,Jackson的版本也会更改。从Spring-boot 2.2版开始,Jackson版本更改为2.10。此Jackson版本更改的一部分更改是使用标志setError(error : string){ this.Form.controls.text1.setValue(''); this.Form.controls.text2.setValue(''); this.Form.controls.text1.setErrors({ error: true }); } switch(result){ case "SUCCESS": // success case case "ERROR1": setError('error1'); break; case "ERROR2": setError('error2'); break; case "ERROR3": setError('error3'); break; } 来序列化Duration时间戳,而不是更早的SerializationFeature.WRITE_DURATIONS_AS_TIMESTAMPS

通过向application.properties添加以下属性,服务(和序列化功能)的行为将像2.2之前的版本

WRITE_DATES_AS_TIMESTAMPS

Springboot 2.2 Changelist

杰克逊2.10 changelist

杰克逊Issue tracker

本文链接:https://www.f2er.com/3118980.html

大家都在问