Skip to content

Commit 74717fd

Browse files
committed
Support segments with Java config.
Fixes #3204
1 parent 6630eb8 commit 74717fd

File tree

3 files changed

+21
-2
lines changed

3 files changed

+21
-2
lines changed

spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SpringCloudCircuitBreakerFilterFactory.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
package org.springframework.cloud.gateway.filter.factory;
1818

1919
import java.net.URI;
20+
import java.net.URLDecoder;
21+
import java.nio.charset.StandardCharsets;
2022
import java.util.HashSet;
2123
import java.util.List;
2224
import java.util.Set;
@@ -135,8 +137,10 @@ public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
135137

136138
@Override
137139
public String toString() {
140+
String fallbackUriString = config.fallbackUri != null
141+
? URLDecoder.decode(config.fallbackUri.toString(), StandardCharsets.UTF_8) : null;
138142
return filterToStringCreator(SpringCloudCircuitBreakerFilterFactory.this)
139-
.append("name", config.getName()).append("fallback", config.fallbackUri).toString();
143+
.append("name", config.getName()).append("fallback", fallbackUriString).toString();
140144
}
141145
};
142146
}
@@ -184,7 +188,7 @@ public Config setFallbackUri(URI fallbackUri) {
184188
}
185189

186190
public Config setFallbackUri(String fallbackUri) {
187-
return setFallbackUri(URI.create(fallbackUri));
191+
return setFallbackUri(UriComponentsBuilder.fromUriString(fallbackUri).build().toUri());
188192
}
189193

190194
public String getName() {

spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SpringCloudCircuitBreakerFilterFactoryTests.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,12 @@ public void filterConnectFailure() {
9191
.is5xxServerError();
9292
}
9393

94+
@Test
95+
public void testJavaConfigSegments() {
96+
testClient.get().uri("/fallback/seg").exchange().expectStatus().isOk().expectBody()
97+
.json("{\"from\":\"circuitbreakerfallbackcontrollerseg\"}");
98+
}
99+
94100
@Test
95101
public void filterErrorPage() {
96102
testClient.get().uri("/delay/3").header("Host", "www.circuitbreakerconnectfail.org").accept(APPLICATION_JSON)

spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SpringCloudCircuitBreakerTestConfig.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,11 @@ public Map<String, String> fallbackcontroller3() {
8383
return Collections.singletonMap("from", "circuitbreakerfallbackcontroller3");
8484
}
8585

86+
@GetMapping("/circuitbreakerFallbackController/seg")
87+
public Map<String, String> fallbackcontrollerSeg() {
88+
return Collections.singletonMap("from", "circuitbreakerfallbackcontrollerseg");
89+
}
90+
8691
@GetMapping("/statusCodeFallbackController")
8792
public Map<String, String> statusCodeFallbackController(ServerWebExchange exchange) {
8893
return Collections.singletonMap("from", "statusCodeFallbackController");
@@ -106,6 +111,10 @@ public RouteLocator circuitBreakerRouteLocator(RouteLocatorBuilder builder) {
106111
return builder.routes()
107112
.route("fallback_controller_3",
108113
r -> r.path("/fallback").filters(f -> f.setPath("/circuitbreakerFallbackController3")).uri(uri))
114+
.route("fallback_with_segments", r -> r.path("/fallback/{*segments}")
115+
.filters(f -> f.circuitBreaker(c -> c.setName("test")
116+
.setFallbackUri("forward:/circuitbreakerFallbackController/{segments}")))
117+
.uri(uri))
109118
.route("circuitbreaker_fallback_forward", r -> r.host("**.circuitbreakerforward.org")
110119
.filters(f -> f.circuitBreaker(config -> config.setFallbackUri("forward:/fallback"))).uri(uri))
111120
.route("circuitbreaker_java",

0 commit comments

Comments
 (0)