Updates HeaderRoutePredicateFactory to use getValuesAsList
Fixes gh-3447
This commit is contained in:
@@ -17,7 +17,6 @@
|
||||
package org.springframework.cloud.gateway.handler.predicate;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.regex.Pattern;
|
||||
@@ -59,9 +58,7 @@ public class HeaderRoutePredicateFactory extends AbstractRoutePredicateFactory<H
|
||||
return new GatewayPredicate() {
|
||||
@Override
|
||||
public boolean test(ServerWebExchange exchange) {
|
||||
List<String> values = exchange.getRequest()
|
||||
.getHeaders()
|
||||
.getOrDefault(config.header, Collections.emptyList());
|
||||
List<String> values = exchange.getRequest().getHeaders().getValuesAsList(config.header);
|
||||
if (values.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -92,6 +92,14 @@ public class HeaderRoutePredicateFactoryTests extends BaseWebClientTests {
|
||||
assertThat(predicate.toString()).contains("Header: myheader regexp=myregexp");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void headerRouteHandlesCommaSeparatedValues() {
|
||||
testClient.get().uri("/get").header("X-Example-Header", "value1, value2 ,exact_match,value3").exchange()
|
||||
.expectStatus().isOk().expectHeader()
|
||||
.valueEquals(HANDLER_MAPPER_HEADER, RoutePredicateHandlerMapping.class.getSimpleName()).expectHeader()
|
||||
.valueEquals(ROUTE_ID_HEADER, "header_test_comma_separated");
|
||||
}
|
||||
|
||||
@EnableAutoConfiguration
|
||||
@SpringBootConfiguration
|
||||
@Import(DefaultTestConfig.class)
|
||||
@@ -103,8 +111,10 @@ public class HeaderRoutePredicateFactoryTests extends BaseWebClientTests {
|
||||
@Bean
|
||||
RouteLocator queryRouteLocator(RouteLocatorBuilder builder) {
|
||||
return builder.routes()
|
||||
.route("header_exists_dsl", r -> r.header("X-Foo").filters(f -> f.prefixPath("/httpbin")).uri(uri))
|
||||
.build();
|
||||
.route("header_exists_dsl", r -> r.header("X-Foo").filters(f -> f.prefixPath("/httpbin")).uri(uri))
|
||||
.route("header_test_comma_separated", r -> r.header("X-Example-Header", "exact_match")
|
||||
.filters(f -> f.prefixPath("/httpbin")).uri(uri))
|
||||
.build();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user