From d326a027bae5b1cb686ce67e62482ba9d02e20d3 Mon Sep 17 00:00:00 2001 From: Yuri-Costa09 Date: Mon, 30 Mar 2026 15:53:52 -0300 Subject: [PATCH 1/2] Refactor hosts and path predicates to use functional programming style. Signed-off-by: Yuri-Costa09 --- .../predicate/GatewayRequestPredicates.java | 22 ++++++++----------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/spring-cloud-gateway-server-webmvc/src/main/java/org/springframework/cloud/gateway/server/mvc/predicate/GatewayRequestPredicates.java b/spring-cloud-gateway-server-webmvc/src/main/java/org/springframework/cloud/gateway/server/mvc/predicate/GatewayRequestPredicates.java index c2b4125e38..35634e7ada 100644 --- a/spring-cloud-gateway-server-webmvc/src/main/java/org/springframework/cloud/gateway/server/mvc/predicate/GatewayRequestPredicates.java +++ b/spring-cloud-gateway-server-webmvc/src/main/java/org/springframework/cloud/gateway/server/mvc/predicate/GatewayRequestPredicates.java @@ -136,12 +136,10 @@ public static RequestPredicate host(String pattern) { @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]); - // I'm sure there's a functional way to do this, I'm just tired... - for (int i = 1; i < patterns.length; i++) { - requestPredicate = requestPredicate.or(hostPredicates(DEFAULT_HOST_INSTANCE).apply(patterns[i])); - } - return requestPredicate; + return Arrays.stream(patterns) + .map(pattern -> hostPredicates(DEFAULT_HOST_INSTANCE).apply(pattern)) + .reduce(RequestPredicate::or) + .orElseThrow(); } /** @@ -180,12 +178,10 @@ public static RequestPredicate path(String pattern) { @Shortcut(type = Type.LIST) public static RequestPredicate path(String... patterns) { Assert.notEmpty(patterns, "'patterns' must not be empty"); - RequestPredicate requestPredicate = RequestPredicates.path(patterns[0]); - // I'm sure there's a functional way to do this, I'm just tired... - for (int i = 1; i < patterns.length; i++) { - requestPredicate = requestPredicate.or(RequestPredicates.path(patterns[i])); - } - return requestPredicate; + return Arrays.stream(patterns) + .map(RequestPredicates::path) + .reduce(RequestPredicate::or) + .orElseThrow(); } /** @@ -614,4 +610,4 @@ public Collection get() { } -} +} \ No newline at end of file From 73764d0ebe7e1a645943f4c66b232df67318aca3 Mon Sep 17 00:00:00 2001 From: Yuri-Costa09 Date: Mon, 30 Mar 2026 16:05:59 -0300 Subject: [PATCH 2/2] Enhance host predicates with additional Javadoc comments for clarity, format code following codebase rules. Signed-off-by: Yuri-Costa09 --- .../predicate/GatewayRequestPredicates.java | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/spring-cloud-gateway-server-webmvc/src/main/java/org/springframework/cloud/gateway/server/mvc/predicate/GatewayRequestPredicates.java b/spring-cloud-gateway-server-webmvc/src/main/java/org/springframework/cloud/gateway/server/mvc/predicate/GatewayRequestPredicates.java index 35634e7ada..89e18907f0 100644 --- a/spring-cloud-gateway-server-webmvc/src/main/java/org/springframework/cloud/gateway/server/mvc/predicate/GatewayRequestPredicates.java +++ b/spring-cloud-gateway-server-webmvc/src/main/java/org/springframework/cloud/gateway/server/mvc/predicate/GatewayRequestPredicates.java @@ -128,18 +128,30 @@ public static RequestPredicate method(HttpMethod... methods) { return RequestPredicates.methods(methods); } + /** + * Return a {@code RequestPredicate} that tests the request host against the given + * host pattern. + * @param pattern the host pattern to match + * @return a predicate that tests against the given host pattern + */ public static RequestPredicate host(String pattern) { Objects.requireNonNull(pattern, "'pattern' must not be null"); return hostPredicates(DEFAULT_HOST_INSTANCE).apply(pattern); } + /** + * Return a {@code RequestPredicate} that tests the request host against the given + * host patterns. + * @param patterns the list of patterns to match + * @return a predicate that tests against the given host patterns + */ @Shortcut(type = Type.LIST) public static RequestPredicate host(String... patterns) { Assert.notEmpty(patterns, "'patterns' must not be empty"); return Arrays.stream(patterns) - .map(pattern -> hostPredicates(DEFAULT_HOST_INSTANCE).apply(pattern)) - .reduce(RequestPredicate::or) - .orElseThrow(); + .map(pattern -> hostPredicates(DEFAULT_HOST_INSTANCE).apply(pattern)) + .reduce(RequestPredicate::or) + .orElseThrow(); } /** @@ -178,10 +190,7 @@ public static RequestPredicate path(String pattern) { @Shortcut(type = Type.LIST) public static RequestPredicate path(String... patterns) { Assert.notEmpty(patterns, "'patterns' must not be empty"); - return Arrays.stream(patterns) - .map(RequestPredicates::path) - .reduce(RequestPredicate::or) - .orElseThrow(); + return Arrays.stream(patterns).map(RequestPredicates::path).reduce(RequestPredicate::or).orElseThrow(); } /** @@ -610,4 +619,4 @@ public Collection get() { } -} \ No newline at end of file +}