Browse Source

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
pull/26197/head
Arjen Poutsma 5 years ago
parent
commit
69aed83504
  1. 5
      spring-webmvc/src/main/java/org/springframework/web/servlet/function/RequestPredicates.java
  2. 17
      spring-webmvc/src/test/java/org/springframework/web/servlet/function/RouterFunctionsTests.java

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

@ -1040,11 +1040,6 @@ public abstract class RequestPredicates { @@ -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<String, String> pathVariables() {

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

@ -22,6 +22,7 @@ import java.util.Optional; @@ -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 { @@ -97,4 +98,20 @@ public class RouterFunctionsTests {
assertThat(resultHandlerFunction.isPresent()).isFalse();
}
@Test
public void nestPathVariable() {
HandlerFunction<ServerResponse> handlerFunction = request -> ServerResponse.ok().build();
RequestPredicate requestPredicate = request -> request.pathVariable("foo").equals("bar");
RouterFunction<ServerResponse> nestedFunction = RouterFunctions.route(requestPredicate, handlerFunction);
RouterFunction<ServerResponse> result = RouterFunctions.nest(RequestPredicates.path("/{foo}"), nestedFunction);
assertThat(result).isNotNull();
MockHttpServletRequest servletRequest = new MockHttpServletRequest("GET", "/bar");
ServerRequest request = new DefaultServerRequest(servletRequest, Collections.emptyList());
Optional<HandlerFunction<ServerResponse>> resultHandlerFunction = result.route(request);
assertThat(resultHandlerFunction.isPresent()).isTrue();
assertThat(resultHandlerFunction.get()).isEqualTo(handlerFunction);
}
}

Loading…
Cancel
Save