From 2e52a3ebef41b7e804062d6a0a6d434e541534d0 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 2 Apr 2025 14:36:51 +0100 Subject: [PATCH] Create spring-boot-http-codec module --- settings.gradle | 1 + .../build.gradle | 1 + ...WebFluxEndpointAccessIntegrationTests.java | 2 +- .../WebFluxEndpointCorsIntegrationTests.java | 4 +- .../WebFluxEndpointIntegrationTests.java | 4 +- ...ndpointAdditionalPathIntegrationTests.java | 2 +- .../spring-boot-actuator/build.gradle | 1 + .../build.gradle | 1 + .../autoconfigure/codec/CodecProperties.java | 66 ------------------- .../autoconfigure/codec/package-info.java | 20 ------ .../reactive/WebFluxAutoConfiguration.java | 8 +-- .../client/WebClientAutoConfiguration.java | 4 +- ...ot.autoconfigure.AutoConfiguration.imports | 1 - .../GraphQlWebFluxAutoConfigurationTests.java | 2 +- ...WebFluxSecurityAutoConfigurationTests.java | 2 +- .../spring-boot-dependencies/build.gradle | 1 + .../spring-boot-docs/build.gradle | 3 + .../spring-boot-http-codec/build.gradle | 24 +++++++ .../CodecsAutoConfiguration.java | 16 ++--- .../autoconfigure}/HttpCodecsProperties.java | 20 +----- .../codec/autoconfigure}/package-info.java | 4 +- ...itional-spring-configuration-metadata.json | 4 ++ ...ot.autoconfigure.AutoConfiguration.imports | 1 + .../CodecsAutoConfigurationTests.java | 42 ++---------- .../spring-boot-starter-webflux/build.gradle | 1 + .../build.gradle | 1 + .../graphql/AutoConfigureGraphQl.java | 2 +- .../WebTestClientAutoConfiguration.java | 4 +- ...igure.graphql.AutoConfigureGraphQl.imports | 2 +- ....web.client.AutoConfigureWebClient.imports | 2 +- ....web.reactive.AutoConfigureWebFlux.imports | 2 +- 31 files changed, 73 insertions(+), 175 deletions(-) delete mode 100644 spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/codec/CodecProperties.java delete mode 100644 spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/codec/package-info.java create mode 100644 spring-boot-project/spring-boot-http-codec/build.gradle rename spring-boot-project/{spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/http/codec => spring-boot-http-codec/src/main/java/org/springframework/boot/http/codec/autoconfigure}/CodecsAutoConfiguration.java (85%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/http/codec => spring-boot-http-codec/src/main/java/org/springframework/boot/http/codec/autoconfigure}/HttpCodecsProperties.java (73%) rename spring-boot-project/{spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/http/codec => spring-boot-http-codec/src/main/java/org/springframework/boot/http/codec/autoconfigure}/package-info.java (84%) create mode 100644 spring-boot-project/spring-boot-http-codec/src/main/resources/META-INF/additional-spring-configuration-metadata.json create mode 100644 spring-boot-project/spring-boot-http-codec/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports rename spring-boot-project/{spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/http/codec => spring-boot-http-codec/src/test/java/org/springframework/boot/http/codec/autoconfigure}/CodecsAutoConfigurationTests.java (73%) diff --git a/settings.gradle b/settings.gradle index 65d651a67e..fc726befac 100644 --- a/settings.gradle +++ b/settings.gradle @@ -78,6 +78,7 @@ include "spring-boot-project:spring-boot-h2console" include "spring-boot-project:spring-boot-hateoas" include "spring-boot-project:spring-boot-hazelcast" include "spring-boot-project:spring-boot-http" +include "spring-boot-project:spring-boot-http-codec" include "spring-boot-project:spring-boot-integration" include "spring-boot-project:spring-boot-jackson" include "spring-boot-project:spring-boot-jdbc" diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/build.gradle b/spring-boot-project/spring-boot-actuator-autoconfigure/build.gradle index 6668a9bfba..a84d1a46c7 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/build.gradle +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/build.gradle @@ -42,6 +42,7 @@ dependencies { optional(project(":spring-boot-project:spring-boot-flyway")) optional(project(":spring-boot-project:spring-boot-hazelcast")) optional(project(":spring-boot-project:spring-boot-http")) + optional(project(":spring-boot-project:spring-boot-http-codec")) optional(project(":spring-boot-project:spring-boot-integration")) optional(project(":spring-boot-project:spring-boot-jackson")) optional(project(":spring-boot-project:spring-boot-jdbc")) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebFluxEndpointAccessIntegrationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebFluxEndpointAccessIntegrationTests.java index 5f2f28eff8..ce31ab1605 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebFluxEndpointAccessIntegrationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebFluxEndpointAccessIntegrationTests.java @@ -24,9 +24,9 @@ import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfi import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfigurations; -import org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration; import org.springframework.boot.autoconfigure.web.reactive.HttpHandlerAutoConfiguration; import org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration; +import org.springframework.boot.http.codec.autoconfigure.CodecsAutoConfiguration; import org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration; import org.springframework.boot.reactor.netty.autoconfigure.NettyReactiveWebServerAutoConfiguration; import org.springframework.boot.test.context.assertj.AssertableReactiveWebApplicationContext; diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebFluxEndpointCorsIntegrationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebFluxEndpointCorsIntegrationTests.java index 11f80c3319..7d1fbd7a74 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebFluxEndpointCorsIntegrationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebFluxEndpointCorsIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,9 +26,9 @@ import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAu import org.springframework.boot.actuate.autoconfigure.endpoint.web.reactive.WebFluxEndpointManagementContextConfiguration; import org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfigurations; -import org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration; import org.springframework.boot.autoconfigure.web.reactive.HttpHandlerAutoConfiguration; import org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration; +import org.springframework.boot.http.codec.autoconfigure.CodecsAutoConfiguration; import org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration; import org.springframework.boot.test.context.runner.ContextConsumer; import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner; diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebFluxEndpointIntegrationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebFluxEndpointIntegrationTests.java index f105192116..41cb110482 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebFluxEndpointIntegrationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebFluxEndpointIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2024 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,9 +25,9 @@ import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfi import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfigurations; -import org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration; import org.springframework.boot.autoconfigure.web.reactive.HttpHandlerAutoConfiguration; import org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration; +import org.springframework.boot.http.codec.autoconfigure.CodecsAutoConfiguration; import org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration; import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner; import org.springframework.context.ApplicationContext; diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebFluxHealthEndpointAdditionalPathIntegrationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebFluxHealthEndpointAdditionalPathIntegrationTests.java index d7b748b214..9b31804e56 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebFluxHealthEndpointAdditionalPathIntegrationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebFluxHealthEndpointAdditionalPathIntegrationTests.java @@ -24,9 +24,9 @@ import org.springframework.boot.actuate.autoconfigure.system.DiskSpaceHealthCont import org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.web.server.netty.NettyReactiveManagementContextAutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfigurations; -import org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration; import org.springframework.boot.autoconfigure.web.reactive.HttpHandlerAutoConfiguration; import org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration; +import org.springframework.boot.http.codec.autoconfigure.CodecsAutoConfiguration; import org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration; import org.springframework.boot.reactor.netty.autoconfigure.NettyReactiveWebServerAutoConfiguration; import org.springframework.boot.test.context.assertj.AssertableReactiveWebApplicationContext; diff --git a/spring-boot-project/spring-boot-actuator/build.gradle b/spring-boot-project/spring-boot-actuator/build.gradle index dc13add36f..3bdeadb9c3 100644 --- a/spring-boot-project/spring-boot-actuator/build.gradle +++ b/spring-boot-project/spring-boot-actuator/build.gradle @@ -110,6 +110,7 @@ dependencies { testImplementation("org.glassfish.jersey.media:jersey-media-json-jackson") testImplementation("com.squareup.okhttp3:mockwebserver") + testRuntimeOnly(project(":spring-boot-project:spring-boot-http-codec")) testRuntimeOnly("ch.qos.logback:logback-classic") testRuntimeOnly("io.projectreactor.netty:reactor-netty-http") testRuntimeOnly("jakarta.xml.bind:jakarta.xml.bind-api") diff --git a/spring-boot-project/spring-boot-autoconfigure-all/build.gradle b/spring-boot-project/spring-boot-autoconfigure-all/build.gradle index 9eebd2c28f..59d5a92c04 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/build.gradle +++ b/spring-boot-project/spring-boot-autoconfigure-all/build.gradle @@ -47,6 +47,7 @@ dependencies { optional(project(":spring-boot-project:spring-boot-h2console")) optional(project(":spring-boot-project:spring-boot-hazelcast")) optional(project(":spring-boot-project:spring-boot-http")) + optional(project(":spring-boot-project:spring-boot-http-codec")) optional(project(":spring-boot-project:spring-boot-jackson")) optional(project(":spring-boot-project:spring-boot-jdbc")) optional(project(":spring-boot-project:spring-boot-jsonb")) diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/codec/CodecProperties.java b/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/codec/CodecProperties.java deleted file mode 100644 index 633c4cb75d..0000000000 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/codec/CodecProperties.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright 2012-2025 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.autoconfigure.codec; - -import org.springframework.boot.autoconfigure.http.codec.HttpCodecsProperties; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.boot.context.properties.DeprecatedConfigurationProperty; -import org.springframework.util.unit.DataSize; - -/** - * {@link ConfigurationProperties Properties} for reactive codecs. - * - * @author Brian Clozel - * @since 2.2.1 - * @deprecated since 3.5.0 for removal in 4.0.0 in favor of {@link HttpCodecsProperties} - */ -@ConfigurationProperties("spring.codec") -@Deprecated(since = "3.5.0", forRemoval = true) -public class CodecProperties { - - /** - * Whether to log form data at DEBUG level, and headers at TRACE level. - */ - private boolean logRequestDetails; - - /** - * Limit on the number of bytes that can be buffered whenever the input stream needs - * to be aggregated. This applies only to the auto-configured WebFlux server and - * WebClient instances. By default this is not set, in which case individual codec - * defaults apply. Most codecs are limited to 256K by default. - */ - private DataSize maxInMemorySize; - - @DeprecatedConfigurationProperty(since = "3.5.0", replacement = "spring.http.codecs.log-request-details") - public boolean isLogRequestDetails() { - return this.logRequestDetails; - } - - public void setLogRequestDetails(boolean logRequestDetails) { - this.logRequestDetails = logRequestDetails; - } - - @DeprecatedConfigurationProperty(since = "3.5.0", replacement = "spring.http.codecs.max-in-memory-size") - public DataSize getMaxInMemorySize() { - return this.maxInMemorySize; - } - - public void setMaxInMemorySize(DataSize maxInMemorySize) { - this.maxInMemorySize = maxInMemorySize; - } - -} diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/codec/package-info.java b/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/codec/package-info.java deleted file mode 100644 index 5acd780bbc..0000000000 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/codec/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2012-2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Auto-configuration for reactive codecs. - */ -package org.springframework.boot.autoconfigure.codec; diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/web/reactive/WebFluxAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/web/reactive/WebFluxAutoConfiguration.java index 32b0d8809a..fed274aa0f 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/web/reactive/WebFluxAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/web/reactive/WebFluxAutoConfiguration.java @@ -32,7 +32,6 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnBooleanProp import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; -import org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration; import org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration; import org.springframework.boot.autoconfigure.template.TemplateAvailabilityProviders; import org.springframework.boot.autoconfigure.thread.Threading; @@ -105,10 +104,9 @@ import org.springframework.web.server.session.WebSessionManager; * @author Weix Sun * @since 2.0.0 */ -@AutoConfiguration( - after = { CodecsAutoConfiguration.class, ReactiveMultipartAutoConfiguration.class, - WebSessionIdResolverAutoConfiguration.class }, - afterName = "org.springframework.boot.validation.autoconfigure.ValidationAutoConfiguration") +@AutoConfiguration(after = { ReactiveMultipartAutoConfiguration.class, WebSessionIdResolverAutoConfiguration.class }, + afterName = { "org.springframework.boot.http.codec.autoconfigure.CodecsAutoConfiguration", + "org.springframework.boot.validation.autoconfigure.ValidationAutoConfiguration" }) @ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.REACTIVE) @ConditionalOnClass(WebFluxConfigurer.class) @ConditionalOnMissingBean({ WebFluxConfigurationSupport.class }) diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/web/reactive/function/client/WebClientAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/web/reactive/function/client/WebClientAutoConfiguration.java index 6593c50f78..08608674de 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/web/reactive/function/client/WebClientAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/web/reactive/function/client/WebClientAutoConfiguration.java @@ -24,7 +24,6 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.http.client.reactive.ClientHttpConnectorAutoConfiguration; -import org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration; import org.springframework.boot.http.client.reactive.ClientHttpConnectorBuilder; import org.springframework.boot.http.client.reactive.ClientHttpConnectorSettings; import org.springframework.boot.ssl.SslBundles; @@ -50,7 +49,8 @@ import org.springframework.web.reactive.function.client.WebClient; * @author Phillip Webb * @since 2.0.0 */ -@AutoConfiguration(after = { CodecsAutoConfiguration.class, ClientHttpConnectorAutoConfiguration.class }) +@AutoConfiguration(after = ClientHttpConnectorAutoConfiguration.class, + afterName = "org.springframework.boot.http.codec.autoconfigure.CodecsAutoConfiguration") @ConditionalOnClass(WebClient.class) public class WebClientAutoConfiguration { diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 95d68da989..8a29d9f2bd 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/spring-boot-project/spring-boot-autoconfigure-all/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -15,7 +15,6 @@ org.springframework.boot.autoconfigure.http.client.HttpClientAutoConfiguration org.springframework.boot.autoconfigure.http.client.service.HttpServiceClientAutoConfiguration org.springframework.boot.autoconfigure.http.client.reactive.ClientHttpConnectorAutoConfiguration org.springframework.boot.autoconfigure.http.client.reactive.service.ReactiveHttpServiceClientAutoConfiguration -org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration org.springframework.boot.autoconfigure.netty.NettyAutoConfiguration org.springframework.boot.autoconfigure.reactor.ReactorAutoConfiguration org.springframework.boot.autoconfigure.session.SessionAutoConfiguration diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/graphql/reactive/GraphQlWebFluxAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/graphql/reactive/GraphQlWebFluxAutoConfigurationTests.java index d8745ea8c4..d6479d27be 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/graphql/reactive/GraphQlWebFluxAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/graphql/reactive/GraphQlWebFluxAutoConfigurationTests.java @@ -30,9 +30,9 @@ import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.graphql.GraphQlAutoConfiguration; import org.springframework.boot.autoconfigure.graphql.GraphQlTestDataFetchers; -import org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration; import org.springframework.boot.autoconfigure.web.reactive.HttpHandlerAutoConfiguration; import org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration; +import org.springframework.boot.http.codec.autoconfigure.CodecsAutoConfiguration; import org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration; import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner; import org.springframework.boot.testsupport.classpath.resources.WithResource; diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/graphql/security/GraphQlWebFluxSecurityAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/graphql/security/GraphQlWebFluxSecurityAutoConfigurationTests.java index 8bf023cb2c..b7130f2778 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/graphql/security/GraphQlWebFluxSecurityAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/graphql/security/GraphQlWebFluxSecurityAutoConfigurationTests.java @@ -29,9 +29,9 @@ import org.springframework.boot.autoconfigure.graphql.Book; import org.springframework.boot.autoconfigure.graphql.GraphQlAutoConfiguration; import org.springframework.boot.autoconfigure.graphql.GraphQlTestDataFetchers; import org.springframework.boot.autoconfigure.graphql.reactive.GraphQlWebFluxAutoConfiguration; -import org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration; import org.springframework.boot.autoconfigure.web.reactive.HttpHandlerAutoConfiguration; import org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration; +import org.springframework.boot.http.codec.autoconfigure.CodecsAutoConfiguration; import org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration; import org.springframework.boot.security.autoconfigure.reactive.ReactiveSecurityAutoConfiguration; import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner; diff --git a/spring-boot-project/spring-boot-dependencies/build.gradle b/spring-boot-project/spring-boot-dependencies/build.gradle index 053ba1427c..86b0bcb057 100644 --- a/spring-boot-project/spring-boot-dependencies/build.gradle +++ b/spring-boot-project/spring-boot-dependencies/build.gradle @@ -2011,6 +2011,7 @@ bom { "spring-boot-hateoas", "spring-boot-hazelcast", "spring-boot-http", + "spring-boot-http-codec", "spring-boot-integration", "spring-boot-jackson", "spring-boot-jarmode-tools", diff --git a/spring-boot-project/spring-boot-docs/build.gradle b/spring-boot-project/spring-boot-docs/build.gradle index 186e9e537f..23d42e62f3 100644 --- a/spring-boot-project/spring-boot-docs/build.gradle +++ b/spring-boot-project/spring-boot-docs/build.gradle @@ -90,6 +90,7 @@ dependencies { autoConfiguration(project(path: ":spring-boot-project:spring-boot-hateoas", configuration: "autoConfigurationMetadata")) autoConfiguration(project(path: ":spring-boot-project:spring-boot-hazelcast", configuration: "autoConfigurationMetadata")) autoConfiguration(project(path: ":spring-boot-project:spring-boot-http", configuration: "autoConfigurationMetadata")) + autoConfiguration(project(path: ":spring-boot-project:spring-boot-http-codec", configuration: "autoConfigurationMetadata")) autoConfiguration(project(path: ":spring-boot-project:spring-boot-integration", configuration: "autoConfigurationMetadata")) autoConfiguration(project(path: ":spring-boot-project:spring-boot-jackson", configuration: "autoConfigurationMetadata")) autoConfiguration(project(path: ":spring-boot-project:spring-boot-jdbc", configuration: "autoConfigurationMetadata")) @@ -159,6 +160,7 @@ dependencies { configurationProperties(project(path: ":spring-boot-project:spring-boot-hateoas", configuration: "configurationPropertiesMetadata")) configurationProperties(project(path: ":spring-boot-project:spring-boot-hazelcast", configuration: "configurationPropertiesMetadata")) configurationProperties(project(path: ":spring-boot-project:spring-boot-http", configuration: "configurationPropertiesMetadata")) + configurationProperties(project(path: ":spring-boot-project:spring-boot-http-codec", configuration: "configurationPropertiesMetadata")) configurationProperties(project(path: ":spring-boot-project:spring-boot-integration", configuration: "configurationPropertiesMetadata")) configurationProperties(project(path: ":spring-boot-project:spring-boot-jackson", configuration: "configurationPropertiesMetadata")) configurationProperties(project(path: ":spring-boot-project:spring-boot-jdbc", configuration: "configurationPropertiesMetadata")) @@ -208,6 +210,7 @@ dependencies { implementation(project(path: ":spring-boot-project:spring-boot-devtools")) implementation(project(path: ":spring-boot-project:spring-boot-docker-compose")) implementation(project(path: ":spring-boot-project:spring-boot-http")) + implementation(project(path: ":spring-boot-project:spring-boot-http-codec")) implementation(project(path: ":spring-boot-project:spring-boot-integration")) implementation(project(path: ":spring-boot-project:spring-boot-jackson")) implementation(project(path: ":spring-boot-project:spring-boot-jdbc")) diff --git a/spring-boot-project/spring-boot-http-codec/build.gradle b/spring-boot-project/spring-boot-http-codec/build.gradle new file mode 100644 index 0000000000..da42a67dec --- /dev/null +++ b/spring-boot-project/spring-boot-http-codec/build.gradle @@ -0,0 +1,24 @@ +plugins { + id "java-library" + id "org.springframework.boot.auto-configuration" + id "org.springframework.boot.configuration-properties" + id "org.springframework.boot.deployed" + id "org.springframework.boot.optional-dependencies" +} + +description = "Spring Boot HTTP Codec" + +dependencies { + api(project(":spring-boot-project:spring-boot")) + api("org.springframework:spring-web") + + implementation("org.springframework:spring-webflux") + + optional(project(":spring-boot-project:spring-boot-autoconfigure")) + optional(project(":spring-boot-project:spring-boot-jackson")) + + testImplementation(project(":spring-boot-project:spring-boot-test")) + testImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-test-support")) + + testRuntimeOnly("ch.qos.logback:logback-classic") +} diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/http/codec/CodecsAutoConfiguration.java b/spring-boot-project/spring-boot-http-codec/src/main/java/org/springframework/boot/http/codec/autoconfigure/CodecsAutoConfiguration.java similarity index 85% rename from spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/http/codec/CodecsAutoConfiguration.java rename to spring-boot-project/spring-boot-http-codec/src/main/java/org/springframework/boot/http/codec/autoconfigure/CodecsAutoConfiguration.java index 858cf83536..9190bef3c5 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/http/codec/CodecsAutoConfiguration.java +++ b/spring-boot-project/spring-boot-http-codec/src/main/java/org/springframework/boot/http/codec/autoconfigure/CodecsAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.http.codec; +package org.springframework.boot.http.codec.autoconfigure; import com.fasterxml.jackson.databind.ObjectMapper; @@ -69,19 +69,15 @@ public class CodecsAutoConfiguration { } - @SuppressWarnings("removal") @Configuration(proxyBeanMethods = false) - @EnableConfigurationProperties({ org.springframework.boot.autoconfigure.codec.CodecProperties.class, - HttpCodecsProperties.class }) + @EnableConfigurationProperties(HttpCodecsProperties.class) static class DefaultCodecsConfiguration { @Bean - DefaultCodecCustomizer defaultCodecCustomizer( - org.springframework.boot.autoconfigure.codec.CodecProperties codecProperties, - HttpCodecsProperties httpCodecProperties, Environment environment) { - return new DefaultCodecCustomizer( - httpCodecProperties.isLogRequestDetails(codecProperties::isLogRequestDetails), - httpCodecProperties.getMaxInMemorySize(codecProperties::getMaxInMemorySize)); + DefaultCodecCustomizer defaultCodecCustomizer(HttpCodecsProperties httpCodecProperties, + Environment environment) { + return new DefaultCodecCustomizer(httpCodecProperties.isLogRequestDetails(), + httpCodecProperties.getMaxInMemorySize()); } static final class DefaultCodecCustomizer implements CodecCustomizer, Ordered { diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/http/codec/HttpCodecsProperties.java b/spring-boot-project/spring-boot-http-codec/src/main/java/org/springframework/boot/http/codec/autoconfigure/HttpCodecsProperties.java similarity index 73% rename from spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/http/codec/HttpCodecsProperties.java rename to spring-boot-project/spring-boot-http-codec/src/main/java/org/springframework/boot/http/codec/autoconfigure/HttpCodecsProperties.java index 2320016a7e..a9c624895a 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/http/codec/HttpCodecsProperties.java +++ b/spring-boot-project/spring-boot-http-codec/src/main/java/org/springframework/boot/http/codec/autoconfigure/HttpCodecsProperties.java @@ -14,9 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.http.codec; - -import java.util.function.Supplier; +package org.springframework.boot.http.codec.autoconfigure; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.util.unit.DataSize; @@ -36,9 +34,6 @@ public class HttpCodecsProperties { */ private boolean logRequestDetails; - @Deprecated(since = "3.5.0", forRemoval = true) - private boolean logRequestDetailsBound = false; - /** * Limit on the number of bytes that can be buffered whenever the input stream needs * to be aggregated. This applies only to the auto-configured WebFlux server and @@ -47,33 +42,20 @@ public class HttpCodecsProperties { */ private DataSize maxInMemorySize; - @Deprecated(since = "3.5.0", forRemoval = true) - private boolean maxInMemorySizeBound = false; - public boolean isLogRequestDetails() { return this.logRequestDetails; } - boolean isLogRequestDetails(Supplier fallback) { - return this.logRequestDetailsBound ? this.logRequestDetails : fallback.get(); - } - public void setLogRequestDetails(boolean logRequestDetails) { this.logRequestDetails = logRequestDetails; - this.logRequestDetailsBound = true; } public DataSize getMaxInMemorySize() { return this.maxInMemorySize; } - DataSize getMaxInMemorySize(Supplier fallback) { - return this.maxInMemorySizeBound ? this.maxInMemorySize : fallback.get(); - } - public void setMaxInMemorySize(DataSize maxInMemorySize) { this.maxInMemorySize = maxInMemorySize; - this.maxInMemorySizeBound = true; } } diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/http/codec/package-info.java b/spring-boot-project/spring-boot-http-codec/src/main/java/org/springframework/boot/http/codec/autoconfigure/package-info.java similarity index 84% rename from spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/http/codec/package-info.java rename to spring-boot-project/spring-boot-http-codec/src/main/java/org/springframework/boot/http/codec/autoconfigure/package-info.java index 6388454876..9382cd76b8 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/main/java/org/springframework/boot/autoconfigure/http/codec/package-info.java +++ b/spring-boot-project/spring-boot-http-codec/src/main/java/org/springframework/boot/http/codec/autoconfigure/package-info.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,4 +17,4 @@ /** * Auto-configuration for HTTP codecs. */ -package org.springframework.boot.autoconfigure.http.codec; +package org.springframework.boot.http.codec.autoconfigure; diff --git a/spring-boot-project/spring-boot-http-codec/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-boot-project/spring-boot-http-codec/src/main/resources/META-INF/additional-spring-configuration-metadata.json new file mode 100644 index 0000000000..671fd2520c --- /dev/null +++ b/spring-boot-project/spring-boot-http-codec/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -0,0 +1,4 @@ +{ + "groups": [], + "properties": [] +} diff --git a/spring-boot-project/spring-boot-http-codec/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/spring-boot-project/spring-boot-http-codec/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000000..b99c83d2ec --- /dev/null +++ b/spring-boot-project/spring-boot-http-codec/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +org.springframework.boot.http.codec.autoconfigure.CodecsAutoConfiguration diff --git a/spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/http/codec/CodecsAutoConfigurationTests.java b/spring-boot-project/spring-boot-http-codec/src/test/java/org/springframework/boot/http/codec/autoconfigure/CodecsAutoConfigurationTests.java similarity index 73% rename from spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/http/codec/CodecsAutoConfigurationTests.java rename to spring-boot-project/spring-boot-http-codec/src/test/java/org/springframework/boot/http/codec/autoconfigure/CodecsAutoConfigurationTests.java index 21364bd062..f706a501b5 100644 --- a/spring-boot-project/spring-boot-autoconfigure-all/src/test/java/org/springframework/boot/autoconfigure/http/codec/CodecsAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-http-codec/src/test/java/org/springframework/boot/http/codec/autoconfigure/CodecsAutoConfigurationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.http.codec; +package org.springframework.boot.http.codec.autoconfigure; import java.util.List; @@ -22,8 +22,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; -import org.springframework.boot.test.context.assertj.AssertableWebApplicationContext; -import org.springframework.boot.test.context.runner.WebApplicationContextRunner; +import org.springframework.boot.test.context.assertj.AssertableApplicationContext; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.boot.web.codec.CodecCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -42,7 +42,7 @@ import static org.assertj.core.api.Assertions.assertThat; */ class CodecsAutoConfigurationTests { - private final WebApplicationContextRunner contextRunner = new WebApplicationContextRunner() + private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() .withConfiguration(AutoConfigurations.of(CodecsAutoConfiguration.class)); @Test @@ -51,13 +51,6 @@ class CodecsAutoConfigurationTests { .hasFieldOrPropertyWithValue("enableLoggingRequestDetails", false)); } - @Test - void loggingRequestDetailsCustomizerShouldUseCodecProperties() { - this.contextRunner.withPropertyValues("spring.codec.log-request-details=true") - .run((context) -> assertThat(defaultCodecs(context)) - .hasFieldOrPropertyWithValue("enableLoggingRequestDetails", true)); - } - @Test void loggingRequestDetailsCustomizerShouldUseHttpCodecsProperties() { this.contextRunner.withPropertyValues("spring.http.codecs.log-request-details=true") @@ -65,21 +58,6 @@ class CodecsAutoConfigurationTests { .hasFieldOrPropertyWithValue("enableLoggingRequestDetails", true)); } - @Test - void logRequestDetailsShouldGivePriorityToHttpCodecProperty() { - this.contextRunner - .withPropertyValues("spring.http.codecs.log-request-details=true", "spring.codec.log-request-details=false") - .run((context) -> assertThat(defaultCodecs(context)) - .hasFieldOrPropertyWithValue("enableLoggingRequestDetails", true)); - } - - @Test - void maxInMemorySizeShouldUseCodecProperties() { - this.contextRunner.withPropertyValues("spring.codec.max-in-memory-size=64KB") - .run((context) -> assertThat(defaultCodecs(context)).hasFieldOrPropertyWithValue("maxInMemorySize", - 64 * 1024)); - } - @Test void maxInMemorySizeShouldUseHttpCodecProperties() { this.contextRunner.withPropertyValues("spring.http.codecs.max-in-memory-size=64KB") @@ -87,14 +65,6 @@ class CodecsAutoConfigurationTests { 64 * 1024)); } - @Test - void maxInMemorySizeShouldGivePriorityToHttpCodecProperty() { - this.contextRunner - .withPropertyValues("spring.http.codecs.max-in-memory-size=64KB", "spring.codec.max-in-memory-size=32KB") - .run((context) -> assertThat(defaultCodecs(context)).hasFieldOrPropertyWithValue("maxInMemorySize", - 64 * 1024)); - } - @Test void defaultCodecCustomizerBeanShouldHaveOrderZero() { this.contextRunner @@ -124,12 +94,12 @@ class CodecsAutoConfigurationTests { @Test void maxInMemorySizeEnforcedInDefaultCodecs() { - this.contextRunner.withPropertyValues("spring.codec.max-in-memory-size=1MB") + this.contextRunner.withPropertyValues("spring.http.codecs.max-in-memory-size=1MB") .run((context) -> assertThat(defaultCodecs(context)).hasFieldOrPropertyWithValue("maxInMemorySize", 1048576)); } - private DefaultCodecs defaultCodecs(AssertableWebApplicationContext context) { + private DefaultCodecs defaultCodecs(AssertableApplicationContext context) { CodecCustomizer customizer = context.getBean(CodecCustomizer.class); CodecConfigurer configurer = new DefaultClientCodecConfigurer(); customizer.customize(configurer); diff --git a/spring-boot-project/spring-boot-starters/spring-boot-starter-webflux/build.gradle b/spring-boot-project/spring-boot-starters/spring-boot-starter-webflux/build.gradle index 2e81db32b6..f2ba81f775 100644 --- a/spring-boot-project/spring-boot-starters/spring-boot-starter-webflux/build.gradle +++ b/spring-boot-project/spring-boot-starters/spring-boot-starter-webflux/build.gradle @@ -5,6 +5,7 @@ plugins { description = "Starter for building WebFlux applications using Spring Framework's Reactive Web support" dependencies { + api(project(":spring-boot-project:spring-boot-http-codec")) api(project(":spring-boot-project:spring-boot-starters:spring-boot-starter")) api(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-json")) api(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-reactor-netty")) diff --git a/spring-boot-project/spring-boot-test-autoconfigure/build.gradle b/spring-boot-project/spring-boot-test-autoconfigure/build.gradle index 2dc02ea7ad..7f4c56bff1 100644 --- a/spring-boot-project/spring-boot-test-autoconfigure/build.gradle +++ b/spring-boot-project/spring-boot-test-autoconfigure/build.gradle @@ -60,6 +60,7 @@ dependencies { optional(project(":spring-boot-project:spring-boot-groovy-templates")) optional(project(":spring-boot-project:spring-boot-hateoas")) optional(project(":spring-boot-project:spring-boot-http")) + optional(project(":spring-boot-project:spring-boot-http-codec")) optional(project(":spring-boot-project:spring-boot-jackson")) optional(project(":spring-boot-project:spring-boot-jdbc")) optional(project(":spring-boot-project:spring-boot-jooq")) diff --git a/spring-boot-project/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/graphql/AutoConfigureGraphQl.java b/spring-boot-project/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/graphql/AutoConfigureGraphQl.java index 936a00818e..e9574f96ad 100644 --- a/spring-boot-project/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/graphql/AutoConfigureGraphQl.java +++ b/spring-boot-project/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/graphql/AutoConfigureGraphQl.java @@ -33,7 +33,7 @@ import org.springframework.boot.autoconfigure.ImportAutoConfiguration; * @author Brian Clozel * @since 2.7.0 * @see GraphQlTest - * @see org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration + * @see org.springframework.boot.http.codec.autoconfigure.CodecsAutoConfiguration * @see org.springframework.boot.validation.autoconfigure.ValidationAutoConfiguration * @see org.springframework.boot.autoconfigure.graphql.GraphQlAutoConfiguration */ diff --git a/spring-boot-project/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/web/reactive/WebTestClientAutoConfiguration.java b/spring-boot-project/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/web/reactive/WebTestClientAutoConfiguration.java index 28962402fa..37cdfd8817 100644 --- a/spring-boot-project/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/web/reactive/WebTestClientAutoConfiguration.java +++ b/spring-boot-project/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/web/reactive/WebTestClientAutoConfiguration.java @@ -23,7 +23,6 @@ import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration; import org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -44,7 +43,8 @@ import org.springframework.web.server.WebHandler; * @author Andy Wilkinson * @since 2.0.0 */ -@AutoConfiguration(after = { CodecsAutoConfiguration.class, WebFluxAutoConfiguration.class }) +@AutoConfiguration(after = WebFluxAutoConfiguration.class, + afterName = "org.springframework.boot.http.codec.autoconfigure.CodecsAutoConfiguration") @ConditionalOnClass({ WebClient.class, WebTestClient.class }) @Import(WebTestClientSecurityConfiguration.class) @EnableConfigurationProperties diff --git a/spring-boot-project/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.test.autoconfigure.graphql.AutoConfigureGraphQl.imports b/spring-boot-project/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.test.autoconfigure.graphql.AutoConfigureGraphQl.imports index 9e650b0b85..fb649288dc 100644 --- a/spring-boot-project/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.test.autoconfigure.graphql.AutoConfigureGraphQl.imports +++ b/spring-boot-project/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.test.autoconfigure.graphql.AutoConfigureGraphQl.imports @@ -1,4 +1,4 @@ # AutoConfigureGraphQl auto-configuration imports -org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration +optional:org.springframework.boot.http.codec.autoconfigure.CodecsAutoConfiguration optional:org.springframework.boot.validation.autoconfigure.ValidationAutoConfiguration org.springframework.boot.autoconfigure.graphql.GraphQlAutoConfiguration diff --git a/spring-boot-project/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.test.autoconfigure.web.client.AutoConfigureWebClient.imports b/spring-boot-project/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.test.autoconfigure.web.client.AutoConfigureWebClient.imports index 2773f66b8f..62d15e7380 100644 --- a/spring-boot-project/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.test.autoconfigure.web.client.AutoConfigureWebClient.imports +++ b/spring-boot-project/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.test.autoconfigure.web.client.AutoConfigureWebClient.imports @@ -1,7 +1,7 @@ # AutoConfigureWebClient auto-configuration imports +optional:org.springframework.boot.http.codec.autoconfigure.CodecsAutoConfiguration optional:org.springframework.boot.http.autoconfigure.HttpMessageConvertersAutoConfiguration org.springframework.boot.test.autoconfigure.web.client.WebClientRestTemplateAutoConfiguration -org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration org.springframework.boot.autoconfigure.web.client.RestClientAutoConfiguration org.springframework.boot.autoconfigure.web.reactive.function.client.WebClientAutoConfiguration \ No newline at end of file diff --git a/spring-boot-project/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebFlux.imports b/spring-boot-project/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebFlux.imports index bd4fd18122..a17fe0cbf6 100644 --- a/spring-boot-project/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebFlux.imports +++ b/spring-boot-project/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebFlux.imports @@ -1,7 +1,7 @@ # AutoConfigureWebFlux auto-configuration imports org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration optional:org.springframework.boot.freemarker.autoconfigure.FreeMarkerAutoConfiguration -org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration +optional:org.springframework.boot.http.codec.autoconfigure.CodecsAutoConfiguration optional:org.springframework.boot.mustache.autoconfigure.MustacheAutoConfiguration optional:org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration optional:org.springframework.boot.validation.autoconfigure.ValidationAutoConfiguration