From 69aed83504c098027e5d878df0b0cf40439facb5 Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Tue, 1 Dec 2020 11:24:45 +0100 Subject: [PATCH] Use nested path variables instead of Servlet's Remove the overriden pathVariable method from the nested request wrapper,so that the merged attributes are used instead of the ones provided by servlet. Closes gh-26163 --- .../web/servlet/function/RequestPredicates.java | 5 ----- .../servlet/function/RouterFunctionsTests.java | 17 +++++++++++++++++ 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/RequestPredicates.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/RequestPredicates.java index a83a40d618e..664d6a851dc 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/RequestPredicates.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/RequestPredicates.java @@ -1040,11 +1040,6 @@ public abstract class RequestPredicates { return this.request.multipartData(); } - @Override - public String pathVariable(String name) { - return this.request.pathVariable(name); - } - @Override @SuppressWarnings("unchecked") public Map pathVariables() { diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/function/RouterFunctionsTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/function/RouterFunctionsTests.java index f46a3770448..787e2e70992 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/function/RouterFunctionsTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/function/RouterFunctionsTests.java @@ -22,6 +22,7 @@ import java.util.Optional; import org.junit.jupiter.api.Test; import org.springframework.web.servlet.handler.PathPatternsTestUtils; +import org.springframework.web.testfixture.servlet.MockHttpServletRequest; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.BDDMockito.given; @@ -97,4 +98,20 @@ public class RouterFunctionsTests { assertThat(resultHandlerFunction.isPresent()).isFalse(); } + @Test + public void nestPathVariable() { + HandlerFunction handlerFunction = request -> ServerResponse.ok().build(); + RequestPredicate requestPredicate = request -> request.pathVariable("foo").equals("bar"); + RouterFunction nestedFunction = RouterFunctions.route(requestPredicate, handlerFunction); + + RouterFunction result = RouterFunctions.nest(RequestPredicates.path("/{foo}"), nestedFunction); + assertThat(result).isNotNull(); + + MockHttpServletRequest servletRequest = new MockHttpServletRequest("GET", "/bar"); + ServerRequest request = new DefaultServerRequest(servletRequest, Collections.emptyList()); + Optional> resultHandlerFunction = result.route(request); + assertThat(resultHandlerFunction.isPresent()).isTrue(); + assertThat(resultHandlerFunction.get()).isEqualTo(handlerFunction); + } + }