Skip to content

Commit 69aed83

Browse files
committed
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
1 parent 0978cc6 commit 69aed83

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

spring-webmvc/src/main/java/org/springframework/web/servlet/function/RequestPredicates.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1040,11 +1040,6 @@ public MultiValueMap<String, Part> multipartData() throws IOException, ServletEx
10401040
return this.request.multipartData();
10411041
}
10421042

1043-
@Override
1044-
public String pathVariable(String name) {
1045-
return this.request.pathVariable(name);
1046-
}
1047-
10481043
@Override
10491044
@SuppressWarnings("unchecked")
10501045
public Map<String, String> pathVariables() {

spring-webmvc/src/test/java/org/springframework/web/servlet/function/RouterFunctionsTests.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.junit.jupiter.api.Test;
2323

2424
import org.springframework.web.servlet.handler.PathPatternsTestUtils;
25+
import org.springframework.web.testfixture.servlet.MockHttpServletRequest;
2526

2627
import static org.assertj.core.api.Assertions.assertThat;
2728
import static org.mockito.BDDMockito.given;
@@ -97,4 +98,20 @@ public void nestNoMatch() {
9798
assertThat(resultHandlerFunction.isPresent()).isFalse();
9899
}
99100

101+
@Test
102+
public void nestPathVariable() {
103+
HandlerFunction<ServerResponse> handlerFunction = request -> ServerResponse.ok().build();
104+
RequestPredicate requestPredicate = request -> request.pathVariable("foo").equals("bar");
105+
RouterFunction<ServerResponse> nestedFunction = RouterFunctions.route(requestPredicate, handlerFunction);
106+
107+
RouterFunction<ServerResponse> result = RouterFunctions.nest(RequestPredicates.path("/{foo}"), nestedFunction);
108+
assertThat(result).isNotNull();
109+
110+
MockHttpServletRequest servletRequest = new MockHttpServletRequest("GET", "/bar");
111+
ServerRequest request = new DefaultServerRequest(servletRequest, Collections.emptyList());
112+
Optional<HandlerFunction<ServerResponse>> resultHandlerFunction = result.route(request);
113+
assertThat(resultHandlerFunction.isPresent()).isTrue();
114+
assertThat(resultHandlerFunction.get()).isEqualTo(handlerFunction);
115+
}
116+
100117
}

0 commit comments

Comments
 (0)