Fixes shortcut type list for host and path predicate shortcuts

Fixes gh-3252
This commit is contained in:
sgibb
2024-03-11 13:27:46 -04:00
parent 089438fb91
commit 2d1fec59d9
3 changed files with 15 additions and 4 deletions

View File

@@ -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]);

View File

@@ -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<String> 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<HttpMethod> 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

View File

@@ -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