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
This commit is contained in:
@@ -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() {
|
||||
|
||||
@@ -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<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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user