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

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

但是我更希望通过配置来实现它。

参考方案

当您将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序列化Duration时间戳。

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

spring.jackson.serialization.write-durations-as-timestamps=false

Springboot 2.2 Changelist

杰克逊2.10 changelist

杰克逊Issue tracker

Spring Data Cassandra的事务管理 - java

我正在使用Spring和Cassandra作为基础数据库。曾提到过弹簧伞项目“ spring data cassandra”。与休眠不同,在这里无法找到如何管理事务。如果您中的某些人已经合并,请共享要包含的事务管理器的详细信息。 参考方案 Cassandra不支持传统(ACID)的事务。在某些特殊情况下,可以通过一些构造来实现事务原子性,例如原子批处理(请参…

IntelliJ Spring MVC教程部署 - java

我尝试了tutorial,当我尝试部署webapp(IntelliJ 13.1.4 Ultimate)时,出现了一个奇怪的错误,如下面的屏幕快照所示。解决此错误的方法是什么? org.jdom.input.JDOMParseException: Error on line 742: The content of elements must consist o…

使用RestTemplate调用API时如何捕获超时异常 - java

我有函数调用api,使用RestTemplate。我想在超时将返回null时捕获异常,这是我的代码://Create resttemplate public List<String> getRoleUser(String username) { try{ RestTemplate restTemplate = new RestTemplate(g…

Spring Boot测试在Maven中失败,可在IntelliJ中使用 - java

我已经做了一个Spring Boot测试来测试JMS消耗。测试看起来像这样:@RunWith(SpringRunner.class) @SpringBootTest(classes = Application.class) @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TES…

春季安全值得付出努力 - java

我一直在关注春季安全性,并注意到它是多么大的包装。我想知道是否值得花一些时间来加强这一点。Spring Security 2.0+为您节省了大量时间,还是以任何方式简化了您的项目? java参考方案 几年前,我考虑将其用于Spring项目,并选择了它,因为它是一个非常繁琐的框架,恕我直言,它提供的灵活性不是必需的。 (据我估计)减少我们自己的身份验证/授权的…