From 2d1fec59d9f077de16f6b2e2b11e0178bbe082a2 Mon Sep 17 00:00:00 2001 From: sgibb Date: Mon, 11 Mar 2024 13:27:46 -0400 Subject: [PATCH] Fixes shortcut type list for host and path predicate shortcuts Fixes gh-3252 --- .../server/mvc/predicate/GatewayRequestPredicates.java | 7 ++++--- ...tewayMvcPropertiesBeanDefinitionRegistrarTests.java | 10 ++++++++++ ...lication-propertiesbeandefinitionregistrartests.yml | 2 +- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/predicate/GatewayRequestPredicates.java b/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/predicate/GatewayRequestPredicates.java index 3499e393..977d8a7d 100644 --- a/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/predicate/GatewayRequestPredicates.java +++ b/spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/predicate/GatewayRequestPredicates.java @@ -36,6 +36,7 @@ import org.springframework.cloud.gateway.server.mvc.common.ArgumentSupplier; import org.springframework.cloud.gateway.server.mvc.common.DefaultArgumentSuppliedEvent; import org.springframework.cloud.gateway.server.mvc.common.MvcUtils; import org.springframework.cloud.gateway.server.mvc.common.Shortcut; +import org.springframework.cloud.gateway.server.mvc.common.Shortcut.Type; import org.springframework.cloud.gateway.server.mvc.common.WeightConfig; import org.springframework.core.io.Resource; import org.springframework.http.HttpHeaders; @@ -121,7 +122,7 @@ public abstract class GatewayRequestPredicates { // TODO: implement parameter aliases for predicates in RequestPredicates for webflux // compatibility? - @Shortcut(type = Shortcut.Type.LIST) + @Shortcut(type = Type.LIST) public static RequestPredicate method(HttpMethod... methods) { return RequestPredicates.methods(methods); } @@ -131,7 +132,7 @@ public abstract class GatewayRequestPredicates { return hostPredicates(DEFAULT_HOST_INSTANCE).apply(pattern); } - @Shortcut + @Shortcut(type = Type.LIST) public static RequestPredicate host(String... patterns) { Assert.notEmpty(patterns, "'patterns' must not be empty"); RequestPredicate requestPredicate = hostPredicates(DEFAULT_HOST_INSTANCE).apply(patterns[0]); @@ -175,7 +176,7 @@ public abstract class GatewayRequestPredicates { * @param patterns the list of patterns to match * @return a predicate that tests against the given path pattern */ - @Shortcut + @Shortcut(type = Type.LIST) public static RequestPredicate path(String... patterns) { Assert.notEmpty(patterns, "'patterns' must not be empty"); RequestPredicate requestPredicate = RequestPredicates.path(patterns[0]); diff --git a/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/config/GatewayMvcPropertiesBeanDefinitionRegistrarTests.java b/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/config/GatewayMvcPropertiesBeanDefinitionRegistrarTests.java index 7d4c3f0f..f9d65fa4 100644 --- a/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/config/GatewayMvcPropertiesBeanDefinitionRegistrarTests.java +++ b/spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/config/GatewayMvcPropertiesBeanDefinitionRegistrarTests.java @@ -16,6 +16,7 @@ package org.springframework.cloud.gateway.server.mvc.config; +import java.util.ArrayList; import java.util.Map; import java.util.Optional; import java.util.Set; @@ -89,6 +90,8 @@ public class GatewayMvcPropertiesBeanDefinitionRegistrarTests { } }); RouterFunction listRoute2RouterFunction = routerFunctions.get("listRoute2"); + final ArrayList paths = new ArrayList<>(); + listRoute2RouterFunction.accept(new AbstractRouterFunctionsVisitor() { @Override public void route(RequestPredicate predicate, HandlerFunction handlerFunction) { @@ -97,6 +100,11 @@ public class GatewayMvcPropertiesBeanDefinitionRegistrarTests { public void method(Set methods) { assertThat(methods).containsOnly(HttpMethod.GET, HttpMethod.POST); } + + @Override + public void path(String pattern) { + paths.add(pattern); + } }); } @@ -105,6 +113,8 @@ public class GatewayMvcPropertiesBeanDefinitionRegistrarTests { assertThat(attributes).containsEntry(MvcUtils.GATEWAY_ROUTE_ID_ATTR, "listRoute2"); } }); + assertThat(paths).containsOnly("/anything/listRoute2", "/anything/anotherlistRoute2"); + RouterFunction listRoute3RouterFunction = routerFunctions.get("listRoute3"); listRoute3RouterFunction.accept(new AbstractRouterFunctionsVisitor() { @Override diff --git a/spring-cloud-gateway-server-mvc/src/test/resources/application-propertiesbeandefinitionregistrartests.yml b/spring-cloud-gateway-server-mvc/src/test/resources/application-propertiesbeandefinitionregistrartests.yml index 34b1726b..ef59ccf2 100644 --- a/spring-cloud-gateway-server-mvc/src/test/resources/application-propertiesbeandefinitionregistrartests.yml +++ b/spring-cloud-gateway-server-mvc/src/test/resources/application-propertiesbeandefinitionregistrartests.yml @@ -29,7 +29,7 @@ spring.cloud.gateway.mvc: uri: no://op predicates: - Method=GET,POST - - Path=/anything/listRoute2 + - Path=/anything/listRoute2,/anything/anotherlistRoute2 filters: - HttpbinUriResolver= - TokenRelay