From 8c7e0c675fb6aee1bb7571c38f60046f5426598a Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 26 Sep 2025 09:04:06 +0100 Subject: [PATCH] Move Jackson datetime property beneath datatype Closes gh-47327 --- .../modules/how-to/pages/spring-mvc.adoc | 8 ++++---- .../JacksonAutoConfiguration.java | 2 +- .../autoconfigure/JacksonProperties.java | 18 +++++++++--------- .../JacksonAutoConfigurationTests.java | 5 +++-- 4 files changed, 17 insertions(+), 16 deletions(-) diff --git a/documentation/spring-boot-docs/src/docs/antora/modules/how-to/pages/spring-mvc.adoc b/documentation/spring-boot-docs/src/docs/antora/modules/how-to/pages/spring-mvc.adoc index 054442556c8..5cc0247607e 100644 --- a/documentation/spring-boot-docs/src/docs/antora/modules/how-to/pages/spring-mvc.adoc +++ b/documentation/spring-boot-docs/src/docs/antora/modules/how-to/pages/spring-mvc.adoc @@ -62,6 +62,10 @@ These features are described in several enums (in Jackson) that map onto propert |=== | Enum | Property | Values +| javadoc:tools.jackson.databind.cfg.DateTimeFeature[] +| `spring.jackson.datatype.datetime.` +| `true`, `false` + | javadoc:tools.jackson.databind.cfg.EnumFeature[] | `spring.jackson.datatype.enum.` | `true`, `false` @@ -70,10 +74,6 @@ These features are described in several enums (in Jackson) that map onto propert | `spring.jackson.datatype.json-node.` | `true`, `false` -| javadoc:tools.jackson.databind.DateTimeFeature[] -| `spring.jackson.datetime.` -| `true`, `false` - | javadoc:tools.jackson.databind.DeserializationFeature[] | `spring.jackson.deserialization.` | `true`, `false` diff --git a/module/spring-boot-jackson/src/main/java/org/springframework/boot/jackson/autoconfigure/JacksonAutoConfiguration.java b/module/spring-boot-jackson/src/main/java/org/springframework/boot/jackson/autoconfigure/JacksonAutoConfiguration.java index 5b682c9e7c1..9598174f35f 100644 --- a/module/spring-boot-jackson/src/main/java/org/springframework/boot/jackson/autoconfigure/JacksonAutoConfiguration.java +++ b/module/spring-boot-jackson/src/main/java/org/springframework/boot/jackson/autoconfigure/JacksonAutoConfiguration.java @@ -177,7 +177,7 @@ public final class JacksonAutoConfiguration { configureFeatures(builder, this.jacksonProperties.getMapper(), builder::configure); configureFeatures(builder, this.jacksonProperties.getRead(), builder::configure); configureFeatures(builder, this.jacksonProperties.getWrite(), builder::configure); - configureFeatures(builder, this.jacksonProperties.getDatetime(), builder::configure); + configureFeatures(builder, this.jacksonProperties.getDatatype().getDatetime(), builder::configure); configureFeatures(builder, this.jacksonProperties.getDatatype().getEnum(), builder::configure); configureFeatures(builder, this.jacksonProperties.getDatatype().getJsonNode(), builder::configure); configureDateFormat(builder); diff --git a/module/spring-boot-jackson/src/main/java/org/springframework/boot/jackson/autoconfigure/JacksonProperties.java b/module/spring-boot-jackson/src/main/java/org/springframework/boot/jackson/autoconfigure/JacksonProperties.java index b5373825ed7..e101ead7e88 100644 --- a/module/spring-boot-jackson/src/main/java/org/springframework/boot/jackson/autoconfigure/JacksonProperties.java +++ b/module/spring-boot-jackson/src/main/java/org/springframework/boot/jackson/autoconfigure/JacksonProperties.java @@ -91,11 +91,6 @@ public class JacksonProperties { */ private final Map write = new EnumMap<>(JsonWriteFeature.class); - /** - * Jackson on/off features for DateTime processing. - */ - private final Map datetime = new EnumMap<>(DateTimeFeature.class); - /** * Controls the inclusion of properties during serialization. Configured with one of * the values in Jackson's JsonInclude.Include enumeration. @@ -166,10 +161,6 @@ public class JacksonProperties { return this.write; } - public Map getDatetime() { - return this.datetime; - } - public JsonInclude.@Nullable Include getDefaultPropertyInclusion() { return this.defaultPropertyInclusion; } @@ -251,6 +242,11 @@ public class JacksonProperties { */ private final Map jsonNode = new EnumMap<>(JsonNodeFeature.class); + /** + * Jackson on/off features for DateTimes. + */ + private final Map datetime = new EnumMap<>(DateTimeFeature.class); + public Map getEnum() { return this.enumFeatures; } @@ -259,6 +255,10 @@ public class JacksonProperties { return this.jsonNode; } + public Map getDatetime() { + return this.datetime; + } + } } diff --git a/module/spring-boot-jackson/src/test/java/org/springframework/boot/jackson/autoconfigure/JacksonAutoConfigurationTests.java b/module/spring-boot-jackson/src/test/java/org/springframework/boot/jackson/autoconfigure/JacksonAutoConfigurationTests.java index 65f405d80d7..e4a97b7b6f7 100644 --- a/module/spring-boot-jackson/src/test/java/org/springframework/boot/jackson/autoconfigure/JacksonAutoConfigurationTests.java +++ b/module/spring-boot-jackson/src/test/java/org/springframework/boot/jackson/autoconfigure/JacksonAutoConfigurationTests.java @@ -266,7 +266,7 @@ class JacksonAutoConfigurationTests { @Test void enableDatetimeFeature() { - this.contextRunner.withPropertyValues("spring.jackson.datetime.write-dates-as-timestamps:true") + this.contextRunner.withPropertyValues("spring.jackson.datatype.datetime.write-dates-as-timestamps:true") .run((context) -> { JsonMapper mapper = context.getBean(JsonMapper.class); DateTimeFeature feature = DateTimeFeature.WRITE_DATES_AS_TIMESTAMPS; @@ -277,7 +277,8 @@ class JacksonAutoConfigurationTests { @Test void disableDatetimeFeature() { - this.contextRunner.withPropertyValues("spring.jackson.datetime.adjust-dates-to-context-time-zone:false") + this.contextRunner + .withPropertyValues("spring.jackson.datatype.datetime.adjust-dates-to-context-time-zone:false") .run((context) -> { JsonMapper mapper = context.getBean(JsonMapper.class); assertThat(DateTimeFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE.enabledByDefault()).isTrue();