From bb0437c0e1d88e3bb4db397ae040494180306333 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 13 Nov 2025 11:39:34 +0000 Subject: [PATCH] Correct names of isolated Json/ObjectMapper properties Closes gh-48116 --- .../reference/pages/actuator/endpoints.adoc | 2 +- .../jackson/Jackson2EndpointAutoConfiguration.java | 2 +- .../jackson/JacksonEndpointAutoConfiguration.java | 2 +- .../additional-spring-configuration-metadata.json | 14 ++++++++++++-- .../Jackson2EndpointAutoConfigurationTests.java | 2 +- .../JacksonEndpointAutoConfigurationTests.java | 4 ++-- .../src/main/resources/application.properties | 2 +- ...orApplicationIsolatedJsonMapperFalseTests.java} | 8 ++++---- ...torApplicationIsolatedJsonMapperTrueTests.java} | 8 ++++---- .../src/main/resources/application.properties | 2 +- ...rseyActuatorIsolatedObjectMapperFalseTests.java | 2 +- ...erseyActuatorIsolatedObjectMapperTrueTests.java | 2 +- ...ationActuatorIsolatedJsonMapperFalseTests.java} | 8 ++++---- ...cationActuatorIsolatedJsonMapperTrueTests.java} | 8 ++++---- 14 files changed, 38 insertions(+), 28 deletions(-) rename smoke-test/spring-boot-smoke-test-actuator/src/test/java/smoketest/actuator/{SampleActuatorApplicationIsolatedObjectMapperFalseTests.java => SampleActuatorApplicationIsolatedJsonMapperFalseTests.java} (87%) rename smoke-test/spring-boot-smoke-test-actuator/src/test/java/smoketest/actuator/{SampleActuatorApplicationIsolatedObjectMapperTrueTests.java => SampleActuatorApplicationIsolatedJsonMapperTrueTests.java} (90%) rename smoke-test/spring-boot-smoke-test-webflux/src/test/java/smoketest/webflux/{SampleWebFluxApplicationActuatorIsolatedObjectMapperFalseTests.java => SampleWebFluxApplicationActuatorIsolatedJsonMapperFalseTests.java} (88%) rename smoke-test/spring-boot-smoke-test-webflux/src/test/java/smoketest/webflux/{SampleWebFluxApplicationActuatorIsolatedObjectMapperTrueTests.java => SampleWebFluxApplicationActuatorIsolatedJsonMapperTrueTests.java} (90%) diff --git a/documentation/spring-boot-docs/src/docs/antora/modules/reference/pages/actuator/endpoints.adoc b/documentation/spring-boot-docs/src/docs/antora/modules/reference/pages/actuator/endpoints.adoc index bdb279de4cb..b0d910805f1 100644 --- a/documentation/spring-boot-docs/src/docs/antora/modules/reference/pages/actuator/endpoints.adoc +++ b/documentation/spring-boot-docs/src/docs/antora/modules/reference/pages/actuator/endpoints.adoc @@ -389,7 +389,7 @@ TIP: See javadoc:org.springframework.boot.actuate.autoconfigure.endpoint.web.Cor When working with JSON, Jackson is used for serialization and deserialization. By default, an isolated javadoc:tools.jackson.databind.json.JsonMapper[] is used. This isolation means that it does not share the same configuration as the application's `JsonMapper` and it is not affected by `spring.jackson.*` properties. -To disable this behavior and configure Actuator to use the application's `JsonMapper`, set configprop:management.endpoints.jackson.isolated-object-mapper[] to `false`. +To disable this behavior and configure Actuator to use the application's `JsonMapper`, set configprop:management.endpoints.jackson.isolated-json-mapper[] to `false`. Alternatively, you can define your own javadoc:org.springframework.boot.actuate.endpoint.jackson.EndpointJsonMapper[] bean that produces a `JsonMapper` that meets your needs. Actuator will then use it for JSON processing. diff --git a/module/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jackson/Jackson2EndpointAutoConfiguration.java b/module/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jackson/Jackson2EndpointAutoConfiguration.java index 8b764183285..35d7013194d 100644 --- a/module/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jackson/Jackson2EndpointAutoConfiguration.java +++ b/module/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jackson/Jackson2EndpointAutoConfiguration.java @@ -40,7 +40,7 @@ import org.springframework.context.annotation.Bean; public final class Jackson2EndpointAutoConfiguration { @Bean - @ConditionalOnBooleanProperty(name = "management.endpoints.jackson.isolated-object-mapper", matchIfMissing = true) + @ConditionalOnBooleanProperty(name = "management.endpoints.jackson2.isolated-object-mapper", matchIfMissing = true) org.springframework.boot.actuate.endpoint.jackson.EndpointJackson2ObjectMapper jackson2EndpointJsonMapper() { ObjectMapper objectMapper = org.springframework.http.converter.json.Jackson2ObjectMapperBuilder.json() .featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, diff --git a/module/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jackson/JacksonEndpointAutoConfiguration.java b/module/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jackson/JacksonEndpointAutoConfiguration.java index b875503b41d..276c3eaff09 100644 --- a/module/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jackson/JacksonEndpointAutoConfiguration.java +++ b/module/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jackson/JacksonEndpointAutoConfiguration.java @@ -37,7 +37,7 @@ import org.springframework.context.annotation.Bean; public final class JacksonEndpointAutoConfiguration { @Bean - @ConditionalOnBooleanProperty(name = "management.endpoints.jackson.isolated-object-mapper", matchIfMissing = true) + @ConditionalOnBooleanProperty(name = "management.endpoints.jackson.isolated-json-mapper", matchIfMissing = true) EndpointJsonMapper endpointJsonMapper() { JsonMapper jsonMapper = JsonMapper.builder() .changeDefaultPropertyInclusion( diff --git a/module/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/module/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json index d05344da913..c287efb0013 100644 --- a/module/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/module/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -44,10 +44,20 @@ } }, { - "name": "management.endpoints.jackson.isolated-object-mapper", + "name": "management.endpoints.jackson.isolated-json-mapper", + "type": "java.lang.Boolean", + "description": "Whether to use an isolated JsonMapper to serialize endpoint JSON.", + "defaultValue": true + }, + { + "name": "management.endpoints.jackson2.isolated-object-mapper", "type": "java.lang.Boolean", "description": "Whether to use an isolated object mapper to serialize endpoint JSON.", - "defaultValue": true + "defaultValue": true, + "deprecation": { + "reason": "Jackson 3 is preferred.", + "since": "4.0.0" + } }, { "name": "management.endpoints.jmx.domain", diff --git a/module/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/jackson/Jackson2EndpointAutoConfigurationTests.java b/module/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/jackson/Jackson2EndpointAutoConfigurationTests.java index 128c819fc68..2cb01f37dac 100644 --- a/module/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/jackson/Jackson2EndpointAutoConfigurationTests.java +++ b/module/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/jackson/Jackson2EndpointAutoConfigurationTests.java @@ -64,7 +64,7 @@ class Jackson2EndpointAutoConfigurationTests { @Test void endpointObjectMapperWhenPropertyFalse() { - this.runner.withPropertyValues("management.endpoints.jackson.isolated-object-mapper=false") + this.runner.withPropertyValues("management.endpoints.jackson2.isolated-object-mapper=false") .run((context) -> assertThat(context) .doesNotHaveBean(org.springframework.boot.actuate.endpoint.jackson.EndpointJackson2ObjectMapper.class)); } diff --git a/module/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/jackson/JacksonEndpointAutoConfigurationTests.java b/module/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/jackson/JacksonEndpointAutoConfigurationTests.java index 91ff31a139c..6e8ad5a0d77 100644 --- a/module/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/jackson/JacksonEndpointAutoConfigurationTests.java +++ b/module/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/jackson/JacksonEndpointAutoConfigurationTests.java @@ -50,13 +50,13 @@ class JacksonEndpointAutoConfigurationTests { @Test void endpointJsonMapperWhenPropertyTrue() { - this.runner.withPropertyValues("management.endpoints.jackson.isolated-object-mapper=true") + this.runner.withPropertyValues("management.endpoints.jackson.isolated-json-mapper=true") .run((context) -> assertThat(context).hasSingleBean(EndpointJsonMapper.class)); } @Test void endpointJsonMapperWhenPropertyFalse() { - this.runner.withPropertyValues("management.endpoints.jackson.isolated-object-mapper=false") + this.runner.withPropertyValues("management.endpoints.jackson.isolated-json-mapper=false") .run((context) -> assertThat(context).doesNotHaveBean(EndpointJsonMapper.class)); } diff --git a/smoke-test/spring-boot-smoke-test-actuator/src/main/resources/application.properties b/smoke-test/spring-boot-smoke-test-actuator/src/main/resources/application.properties index 9c19904c839..c01f32ea9c5 100644 --- a/smoke-test/spring-boot-smoke-test-actuator/src/main/resources/application.properties +++ b/smoke-test/spring-boot-smoke-test-actuator/src/main/resources/application.properties @@ -30,5 +30,5 @@ management.endpoint.health.group.comp.show-details=always management.endpoints.migrate-legacy-ids=true -management.endpoints.jackson.isolated-object-mapper=true +management.endpoints.jackson.isolated-json-mapper=true spring.jackson.mapper.require-setters-for-getters=true diff --git a/smoke-test/spring-boot-smoke-test-actuator/src/test/java/smoketest/actuator/SampleActuatorApplicationIsolatedObjectMapperFalseTests.java b/smoke-test/spring-boot-smoke-test-actuator/src/test/java/smoketest/actuator/SampleActuatorApplicationIsolatedJsonMapperFalseTests.java similarity index 87% rename from smoke-test/spring-boot-smoke-test-actuator/src/test/java/smoketest/actuator/SampleActuatorApplicationIsolatedObjectMapperFalseTests.java rename to smoke-test/spring-boot-smoke-test-actuator/src/test/java/smoketest/actuator/SampleActuatorApplicationIsolatedJsonMapperFalseTests.java index 7f216fba098..caf10be6f74 100644 --- a/smoke-test/spring-boot-smoke-test-actuator/src/test/java/smoketest/actuator/SampleActuatorApplicationIsolatedObjectMapperFalseTests.java +++ b/smoke-test/spring-boot-smoke-test-actuator/src/test/java/smoketest/actuator/SampleActuatorApplicationIsolatedJsonMapperFalseTests.java @@ -17,7 +17,7 @@ package smoketest.actuator; import org.junit.jupiter.api.Test; -import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.resttestclient.TestRestTemplate; @@ -31,16 +31,16 @@ import org.springframework.test.context.ContextConfiguration; import static org.assertj.core.api.Assertions.assertThat; /** - * Integration test for WebMVC actuator when using an isolated {@link ObjectMapper}. + * Integration test for WebMVC actuator when not using an isolated {@link JsonMapper}. * * @author Phillip Webb */ @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, - properties = { "management.endpoints.jackson.isolated-object-mapper=false", + properties = { "management.endpoints.jackson.isolated-json-mapper=false", "spring.jackson.mapper.require-setters-for-getters=true" }) @ContextConfiguration(loader = ApplicationStartupSpringBootContextLoader.class) @AutoConfigureTestRestTemplate -class SampleActuatorApplicationIsolatedObjectMapperFalseTests { +class SampleActuatorApplicationIsolatedJsonMapperFalseTests { @Autowired private TestRestTemplate testRestTemplate; diff --git a/smoke-test/spring-boot-smoke-test-actuator/src/test/java/smoketest/actuator/SampleActuatorApplicationIsolatedObjectMapperTrueTests.java b/smoke-test/spring-boot-smoke-test-actuator/src/test/java/smoketest/actuator/SampleActuatorApplicationIsolatedJsonMapperTrueTests.java similarity index 90% rename from smoke-test/spring-boot-smoke-test-actuator/src/test/java/smoketest/actuator/SampleActuatorApplicationIsolatedObjectMapperTrueTests.java rename to smoke-test/spring-boot-smoke-test-actuator/src/test/java/smoketest/actuator/SampleActuatorApplicationIsolatedJsonMapperTrueTests.java index 31b8236484e..9a137e29f36 100644 --- a/smoke-test/spring-boot-smoke-test-actuator/src/test/java/smoketest/actuator/SampleActuatorApplicationIsolatedObjectMapperTrueTests.java +++ b/smoke-test/spring-boot-smoke-test-actuator/src/test/java/smoketest/actuator/SampleActuatorApplicationIsolatedJsonMapperTrueTests.java @@ -17,7 +17,7 @@ package smoketest.actuator; import org.junit.jupiter.api.Test; -import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.resttestclient.TestRestTemplate; @@ -31,16 +31,16 @@ import org.springframework.test.context.ContextConfiguration; import static org.assertj.core.api.Assertions.assertThat; /** - * Integration test for WebMVC actuator when using an isolated {@link ObjectMapper}. + * Integration test for WebMVC actuator when using an isolated {@link JsonMapper}. * * @author Phillip Webb */ @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, - properties = { "management.endpoints.jackson.isolated-object-mapper=true", + properties = { "management.endpoints.jackson.isolated-json-mapper=true", "spring.jackson.mapper.require-setters-for-getters=true" }) @ContextConfiguration(loader = ApplicationStartupSpringBootContextLoader.class) @AutoConfigureTestRestTemplate -class SampleActuatorApplicationIsolatedObjectMapperTrueTests { +class SampleActuatorApplicationIsolatedJsonMapperTrueTests { @Autowired private TestRestTemplate testRestTemplate; diff --git a/smoke-test/spring-boot-smoke-test-jersey/src/main/resources/application.properties b/smoke-test/spring-boot-smoke-test-jersey/src/main/resources/application.properties index 037f2782e08..0b88415b6ab 100644 --- a/smoke-test/spring-boot-smoke-test-jersey/src/main/resources/application.properties +++ b/smoke-test/spring-boot-smoke-test-jersey/src/main/resources/application.properties @@ -1,3 +1,3 @@ management.endpoints.web.exposure.include=* -management.endpoints.jackson.isolated-object-mapper=true +management.endpoints.jackson.isolated-json-mapper=true spring.jackson2.visibility.field=any diff --git a/smoke-test/spring-boot-smoke-test-jersey/src/test/java/smoketest/jersey/JerseyActuatorIsolatedObjectMapperFalseTests.java b/smoke-test/spring-boot-smoke-test-jersey/src/test/java/smoketest/jersey/JerseyActuatorIsolatedObjectMapperFalseTests.java index e86f85dd38b..284bda04a4a 100644 --- a/smoke-test/spring-boot-smoke-test-jersey/src/test/java/smoketest/jersey/JerseyActuatorIsolatedObjectMapperFalseTests.java +++ b/smoke-test/spring-boot-smoke-test-jersey/src/test/java/smoketest/jersey/JerseyActuatorIsolatedObjectMapperFalseTests.java @@ -39,7 +39,7 @@ import static org.assertj.core.api.Assertions.assertThat; */ @AutoConfigureTestRestTemplate @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, - properties = "management.endpoints.jackson.isolated-object-mapper=false") + properties = "management.endpoints.jackson2.isolated-object-mapper=false") @ContextConfiguration(loader = ApplicationStartupSpringBootContextLoader.class) class JerseyActuatorIsolatedObjectMapperFalseTests { diff --git a/smoke-test/spring-boot-smoke-test-jersey/src/test/java/smoketest/jersey/JerseyActuatorIsolatedObjectMapperTrueTests.java b/smoke-test/spring-boot-smoke-test-jersey/src/test/java/smoketest/jersey/JerseyActuatorIsolatedObjectMapperTrueTests.java index ae8acd1d89e..bf71e1a4dd4 100644 --- a/smoke-test/spring-boot-smoke-test-jersey/src/test/java/smoketest/jersey/JerseyActuatorIsolatedObjectMapperTrueTests.java +++ b/smoke-test/spring-boot-smoke-test-jersey/src/test/java/smoketest/jersey/JerseyActuatorIsolatedObjectMapperTrueTests.java @@ -39,7 +39,7 @@ import static org.assertj.core.api.Assertions.assertThat; */ @AutoConfigureTestRestTemplate @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, - properties = "management.endpoints.jackson.isolated-object-mapper=true") + properties = "management.endpoints.jackson.isolated-json-mapper=true") @ContextConfiguration(loader = ApplicationStartupSpringBootContextLoader.class) class JerseyActuatorIsolatedObjectMapperTrueTests { diff --git a/smoke-test/spring-boot-smoke-test-webflux/src/test/java/smoketest/webflux/SampleWebFluxApplicationActuatorIsolatedObjectMapperFalseTests.java b/smoke-test/spring-boot-smoke-test-webflux/src/test/java/smoketest/webflux/SampleWebFluxApplicationActuatorIsolatedJsonMapperFalseTests.java similarity index 88% rename from smoke-test/spring-boot-smoke-test-webflux/src/test/java/smoketest/webflux/SampleWebFluxApplicationActuatorIsolatedObjectMapperFalseTests.java rename to smoke-test/spring-boot-smoke-test-webflux/src/test/java/smoketest/webflux/SampleWebFluxApplicationActuatorIsolatedJsonMapperFalseTests.java index 514dabf5994..dd056c91cad 100644 --- a/smoke-test/spring-boot-smoke-test-webflux/src/test/java/smoketest/webflux/SampleWebFluxApplicationActuatorIsolatedObjectMapperFalseTests.java +++ b/smoke-test/spring-boot-smoke-test-webflux/src/test/java/smoketest/webflux/SampleWebFluxApplicationActuatorIsolatedJsonMapperFalseTests.java @@ -17,7 +17,7 @@ package smoketest.webflux; import org.junit.jupiter.api.Test; -import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -27,16 +27,16 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.web.reactive.server.WebTestClient; /** - * Integration test for WebFlux actuator when using an isolated {@link ObjectMapper}. + * Integration test for WebFlux actuator when using an isolated {@link JsonMapper}. * * @author Phillip Webb */ @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, - properties = { "management.endpoints.jackson.isolated-object-mapper=false", + properties = { "management.endpoints.jackson.isolated-json-mapper=false", "spring.jackson.mapper.require-setters-for-getters=true" }) @ContextConfiguration(loader = ApplicationStartupSpringBootContextLoader.class) @AutoConfigureWebTestClient -class SampleWebFluxApplicationActuatorIsolatedObjectMapperFalseTests { +class SampleWebFluxApplicationActuatorIsolatedJsonMapperFalseTests { @Autowired private WebTestClient webClient; diff --git a/smoke-test/spring-boot-smoke-test-webflux/src/test/java/smoketest/webflux/SampleWebFluxApplicationActuatorIsolatedObjectMapperTrueTests.java b/smoke-test/spring-boot-smoke-test-webflux/src/test/java/smoketest/webflux/SampleWebFluxApplicationActuatorIsolatedJsonMapperTrueTests.java similarity index 90% rename from smoke-test/spring-boot-smoke-test-webflux/src/test/java/smoketest/webflux/SampleWebFluxApplicationActuatorIsolatedObjectMapperTrueTests.java rename to smoke-test/spring-boot-smoke-test-webflux/src/test/java/smoketest/webflux/SampleWebFluxApplicationActuatorIsolatedJsonMapperTrueTests.java index 3dd745a4c4b..6f9c8ef47fa 100644 --- a/smoke-test/spring-boot-smoke-test-webflux/src/test/java/smoketest/webflux/SampleWebFluxApplicationActuatorIsolatedObjectMapperTrueTests.java +++ b/smoke-test/spring-boot-smoke-test-webflux/src/test/java/smoketest/webflux/SampleWebFluxApplicationActuatorIsolatedJsonMapperTrueTests.java @@ -19,7 +19,7 @@ package smoketest.webflux; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Test; -import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -32,16 +32,16 @@ import org.springframework.test.web.reactive.server.WebTestClient; import static org.assertj.core.api.Assertions.assertThat; /** - * Integration test for WebFlux actuator when not using an isolated {@link ObjectMapper}. + * Integration test for WebFlux actuator when not using an isolated {@link JsonMapper}. * * @author Phillip Webb */ @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, - properties = { "management.endpoints.jackson.isolated-object-mapper=true", + properties = { "management.endpoints.jackson.isolated-json-mapper=true", "spring.jackson.mapper.require-setters-for-getters=true" }) @ContextConfiguration(loader = ApplicationStartupSpringBootContextLoader.class) @AutoConfigureWebTestClient -class SampleWebFluxApplicationActuatorIsolatedObjectMapperTrueTests { +class SampleWebFluxApplicationActuatorIsolatedJsonMapperTrueTests { @Autowired private WebTestClient webClient;