diff --git a/spring-cloud-gateway-server-mvc/pom.xml b/spring-cloud-gateway-server-mvc/pom.xml
index e9f6b80c..ad20bf03 100644
--- a/spring-cloud-gateway-server-mvc/pom.xml
+++ b/spring-cloud-gateway-server-mvc/pom.xml
@@ -107,6 +107,16 @@
org.springframework.cloud
spring-cloud-starter-stream-rabbit
+
+
+ io.projectreactor.netty
+ reactor-netty
+
+
+ org.springframework.boot
+ spring-boot-starter-webflux
+
+
test
diff --git a/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/GatewayServerMvcAutoConfiguration.java b/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/GatewayServerMvcAutoConfiguration.java
index d515b906..37cd5245 100644
--- a/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/GatewayServerMvcAutoConfiguration.java
+++ b/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/GatewayServerMvcAutoConfiguration.java
@@ -216,18 +216,19 @@ public class GatewayServerMvcAutoConfiguration {
static final boolean REACTOR_NETTY = ClassUtils.isPresent("reactor.netty.http.client.HttpClient", null);
static final boolean JDK = ClassUtils.isPresent("java.net.http.HttpClient", null);
static final boolean HIGHER_PRIORITY = APACHE || JETTY || REACTOR_NETTY;
+ static final String SPRING_REDIRECTS_PROPERTY = "spring.http.client.redirects";
+ static final String SPRING_HTTP_FACTORY_PROPERTY = "spring.http.client.factory";
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
- HttpRedirects redirects = environment.getProperty("spring.http.client.settings.redirects",
- HttpRedirects.class);
+ HttpRedirects redirects = environment.getProperty(SPRING_REDIRECTS_PROPERTY, HttpRedirects.class);
if (redirects == null) {
// the user hasn't set anything, change the default
environment.getPropertySources()
.addFirst(new MapPropertySource("gatewayHttpClientProperties",
- Map.of("spring.http.client.settings.redirects", HttpRedirects.DONT_FOLLOW)));
+ Map.of(SPRING_REDIRECTS_PROPERTY, HttpRedirects.DONT_FOLLOW)));
}
- Factory factory = environment.getProperty("spring.http.client.settings.factory", Factory.class);
+ Factory factory = environment.getProperty(SPRING_HTTP_FACTORY_PROPERTY, Factory.class);
boolean setJdkHttpClientProperties = false;
if (factory == null && !HIGHER_PRIORITY) {
diff --git a/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/GatewayServerMvcAutoConfigurationTests.java b/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/GatewayServerMvcAutoConfigurationTests.java
index 886a7429..0eb0ff71 100644
--- a/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/GatewayServerMvcAutoConfigurationTests.java
+++ b/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/GatewayServerMvcAutoConfigurationTests.java
@@ -142,11 +142,8 @@ public class GatewayServerMvcAutoConfigurationTests {
@Test
void gatewayHttpClientPropertiesWork() {
ConfigurableApplicationContext context = new SpringApplicationBuilder(TestConfig.class)
- .properties("spring.main.web-application-type=none",
- "spring.cloud.gateway.mvc.http-client.connect-timeout=1s",
- "spring.cloud.gateway.mvc.http-client.read-timeout=2s",
- "spring.cloud.gateway.mvc.http-client.ssl-bundle=mybundle",
- "spring.cloud.gateway.mvc.http-client.type=autodetect",
+ .properties("spring.main.web-application-type=none", "spring.http.client.connect-timeout=1s",
+ "spring.http.client.read-timeout=2s", "spring.http.client.ssl.bundle=mybundle",
"spring.ssl.bundle.pem.mybundle.keystore.certificate=" + cert,
"spring.ssl.bundle.pem.mybundle.keystore.key=" + key)
.run();
@@ -201,7 +198,7 @@ public class GatewayServerMvcAutoConfigurationTests {
@Test
void settingHttpClientFactoryWorks() {
ConfigurableApplicationContext context = new SpringApplicationBuilder(TestConfig.class)
- .properties("spring.main.web-application-type=none", "spring.http.client.settings.factory=simple")
+ .properties("spring.main.web-application-type=none", "spring.http.client.factory=simple")
.run();
ClientHttpRequestFactoryBuilder> builder = context.getBean(ClientHttpRequestFactoryBuilder.class);
assertThat(builder).isInstanceOf(SimpleClientHttpRequestFactoryBuilder.class);
diff --git a/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/ServerMvcIntegrationTests.java b/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/ServerMvcIntegrationTests.java
index f72b1943..4efa9b8c 100644
--- a/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/ServerMvcIntegrationTests.java
+++ b/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/ServerMvcIntegrationTests.java
@@ -142,8 +142,7 @@ import static org.springframework.web.servlet.function.RequestPredicates.POST;
import static org.springframework.web.servlet.function.RequestPredicates.path;
@SuppressWarnings("unchecked")
-@SpringBootTest(
- properties = { "spring.cloud.gateway.mvc.http-client.type=jdk", "spring.cloud.gateway.function.enabled=false" },
+@SpringBootTest(properties = { "spring.http.client.factory=jdk", "spring.cloud.gateway.function.enabled=false" },
webEnvironment = WebEnvironment.RANDOM_PORT)
@ContextConfiguration(initializers = HttpbinTestcontainers.class)
@ExtendWith(OutputCaptureExtension.class)
diff --git a/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/filter/AfterFilterFunctionsTests.java b/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/filter/AfterFilterFunctionsTests.java
index a0ee50b8..cbb6e0a6 100644
--- a/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/filter/AfterFilterFunctionsTests.java
+++ b/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/filter/AfterFilterFunctionsTests.java
@@ -60,58 +60,58 @@ class AfterFilterFunctionsTests {
@Test
void doesNotRemoveJsonAttributes() {
restClient.get()
- .uri("/anything/does_not/remove_json_attributes")
- .exchange()
- .expectStatus()
- .isOk()
- .expectBody(Map.class)
- .consumeWith(res -> {
- assertThat(res.getResponseBody()).containsEntry("foo", "bar");
- assertThat(res.getResponseBody()).containsEntry("baz", "qux");
- });
+ .uri("/anything/does_not/remove_json_attributes")
+ .exchange()
+ .expectStatus()
+ .isOk()
+ .expectBody(Map.class)
+ .consumeWith(res -> {
+ assertThat(res.getResponseBody()).containsEntry("foo", "bar");
+ assertThat(res.getResponseBody()).containsEntry("baz", "qux");
+ });
}
@Test
void removeJsonAttributesToAvoidBeingRecursive() {
restClient.get()
- .uri("/anything/remove_json_attributes_to_avoid_being_recursive")
- .exchange()
- .expectStatus()
- .isOk()
- .expectBody(Map.class)
- .consumeWith(res -> {
- assertThat(res.getResponseBody()).doesNotContainKey("foo");
- assertThat(res.getResponseBody()).containsEntry("baz", "qux");
- });
+ .uri("/anything/remove_json_attributes_to_avoid_being_recursive")
+ .exchange()
+ .expectStatus()
+ .isOk()
+ .expectBody(Map.class)
+ .consumeWith(res -> {
+ assertThat(res.getResponseBody()).doesNotContainKey("foo");
+ assertThat(res.getResponseBody()).containsEntry("baz", "qux");
+ });
}
@Test
void removeJsonAttributesRecursively() {
restClient.get()
- .uri("/anything/remove_json_attributes_recursively")
- .exchange()
- .expectStatus()
- .isOk()
- .expectBody(Map.class)
- .consumeWith(res -> {
- assertThat(res.getResponseBody()).containsKey("foo");
- assertThat((Map) res.getResponseBody().get("foo")).containsEntry("bar", "A");
- assertThat(res.getResponseBody()).containsEntry("quux", "C");
- assertThat(res.getResponseBody()).doesNotContainKey("qux");
- });
+ .uri("/anything/remove_json_attributes_recursively")
+ .exchange()
+ .expectStatus()
+ .isOk()
+ .expectBody(Map.class)
+ .consumeWith(res -> {
+ assertThat(res.getResponseBody()).containsKey("foo");
+ assertThat((Map) res.getResponseBody().get("foo")).containsEntry("bar", "A");
+ assertThat(res.getResponseBody()).containsEntry("quux", "C");
+ assertThat(res.getResponseBody()).doesNotContainKey("qux");
+ });
}
@Test
void raisedErrorWhenRemoveJsonAttributes() {
restClient.get()
- .uri("/anything/raised_error_when_remove_json_attributes")
- .exchange()
- .expectStatus()
- .is5xxServerError()
- .expectBody(String.class)
- .consumeWith(res -> {
- assertThat(res.getResponseBody()).isEqualTo("Failed to process JSON of response body.");
- });
+ .uri("/anything/raised_error_when_remove_json_attributes")
+ .exchange()
+ .expectStatus()
+ .is5xxServerError()
+ .expectBody(String.class)
+ .consumeWith(res -> {
+ assertThat(res.getResponseBody()).isEqualTo("Failed to process JSON of response body.");
+ });
}
@SpringBootConfiguration