Skip to content

Commit e6c37a6

Browse files
committed
Disable Jackson SerializationFeature.WRITE_DURATIONS_AS_TIMESTAMPS by default
Jackson added a breaking change in 2.10 for the way Duration is serialized. Before that the DurationSerializer was using SerializationFeature.WRITE_DATES_AS_TIMESTAMPS to check whether Duration should be serialized as a timestamp or not. Since 2.10 Jackson uses SerializationFeature.WRITE_DURATIONS_AS_TIMESTAMPS to check whether Duration should be serialized as a timestamp or not. This commit aligns the default for SerializationFeature.WRITE_DURATIONS_AS_TIMESTAMPS with the default for SerializationFeature.WRITE_DATES_AS_TIMESTAMPS The change in Jackson was done in FasterXML/jackson-modules-java8#75 fixes spring-projectsgh-19345
1 parent 9136f54 commit e6c37a6

File tree

2 files changed

+11
-0
lines changed

2 files changed

+11
-0
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jackson/JacksonAutoConfiguration.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ public class JacksonAutoConfiguration {
8888
static {
8989
Map<Object, Boolean> featureDefaults = new HashMap<>();
9090
featureDefaults.put(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
91+
featureDefaults.put(SerializationFeature.WRITE_DURATIONS_AS_TIMESTAMPS, false);
9192
FEATURE_DEFAULTS = Collections.unmodifiableMap(featureDefaults);
9293
}
9394

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jackson/JacksonAutoConfigurationTests.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.io.IOException;
2020
import java.text.DateFormat;
2121
import java.text.SimpleDateFormat;
22+
import java.time.Duration;
2223
import java.util.Date;
2324
import java.util.HashSet;
2425
import java.util.Set;
@@ -378,6 +379,15 @@ void writeDatesAsTimestampsDefault() {
378379
});
379380
}
380381

382+
@Test
383+
void writeDurationAsTimestampsDefault() {
384+
this.contextRunner.run((context) -> {
385+
ObjectMapper mapper = context.getBean(ObjectMapper.class);
386+
Duration duration = Duration.ofHours(2);
387+
assertThat(mapper.writeValueAsString(duration)).isEqualTo("\"PT2H\"");
388+
});
389+
}
390+
381391
@Test
382392
void writeWithVisibility() {
383393
this.contextRunner

0 commit comments

Comments
 (0)