Partially revert RequestPredicates attribute handling

This commit partially reverts 39786e4790
and c5c843696b, as the approach taken did
not take into account request predicates that query request attributes,
including path variables.

Closes gh-31732
This commit is contained in:
Arjen Poutsma
2023-12-04 10:06:28 +01:00
parent aa347e5fe6
commit 52d4b83dba
5 changed files with 499 additions and 366 deletions

View File

@@ -114,4 +114,18 @@ public class RouterFunctionsTests {
assertThat(resultHandlerFunction).contains(handlerFunction);
}
@Test
public void composedPathVariable() {
HandlerFunction<ServerResponse> handlerFunction = request -> ServerResponse.ok().build();
RequestPredicate requestPredicate = RequestPredicates.path("/{foo}").and(
request -> request.pathVariable("foo").equals("bar"));
RouterFunction<ServerResponse> routerFunction = RouterFunctions.route(requestPredicate, handlerFunction);
MockHttpServletRequest servletRequest = new MockHttpServletRequest("GET", "/bar");
ServerRequest request = new DefaultServerRequest(servletRequest, Collections.emptyList());
Optional<HandlerFunction<ServerResponse>> resultHandlerFunction = routerFunction.route(request);
assertThat(resultHandlerFunction).isPresent();
assertThat(resultHandlerFunction).contains(handlerFunction);
}
}