Skip to content

Commit 00a5106

Browse files
committed
Add route(RequestPredicate, HandlerFunction) to RouterFunctions builder
Closes gh-22701
1 parent bb002af commit 00a5106

File tree

3 files changed

+31
-3
lines changed

3 files changed

+31
-3
lines changed

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,12 @@ public RouterFunctions.Builder OPTIONS(String pattern, HandlerFunction<ServerRes
132132
return add(RequestPredicates.OPTIONS(pattern), handlerFunction);
133133
}
134134

135+
@Override
136+
public RouterFunctions.Builder route(RequestPredicate predicate,
137+
HandlerFunction<ServerResponse> handlerFunction) {
138+
return add(RouterFunctions.route(predicate, handlerFunction));
139+
}
140+
135141
@Override
136142
public RouterFunctions.Builder OPTIONS(String pattern, RequestPredicate predicate,
137143
HandlerFunction<ServerResponse> handlerFunction) {

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,17 @@ public interface Builder {
349349
*/
350350
Builder OPTIONS(String pattern, HandlerFunction<ServerResponse> handlerFunction);
351351

352+
/**
353+
* Adds a route to the given handler function that handles all requests that match the
354+
* given predicate.
355+
*
356+
* @param predicate the request predicate to match
357+
* @param handlerFunction the handler function to handle all requests that match the predicate
358+
* @return this builder
359+
* @see RequestPredicates
360+
*/
361+
Builder route(RequestPredicate predicate, HandlerFunction<ServerResponse> handlerFunction);
362+
352363
/**
353364
* Adds a route to the given handler function that handles all HTTP {@code OPTIONS} requests
354365
* that match the given pattern and predicate.

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

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929

3030
import static java.util.Collections.emptyList;
3131
import static org.junit.Assert.*;
32+
import static org.springframework.web.servlet.function.RequestPredicates.HEAD;
3233

3334
/**
3435
* @author Arjen Poutsma
@@ -41,17 +42,27 @@ public void route() {
4142
.GET("/foo", request -> ServerResponse.ok().build())
4243
.POST("/", RequestPredicates.contentType(MediaType.TEXT_PLAIN),
4344
request -> ServerResponse.noContent().build())
45+
.route(HEAD("/foo"), request -> ServerResponse.accepted().build())
4446
.build();
4547

4648
MockHttpServletRequest servletRequest = new MockHttpServletRequest("GET", "/foo");
47-
ServerRequest fooRequest = new DefaultServerRequest(servletRequest, emptyList());
49+
ServerRequest getFooRequest = new DefaultServerRequest(servletRequest, emptyList());
4850

49-
Optional<Integer> responseStatus = route.route(fooRequest)
50-
.map(handlerFunction -> handle(handlerFunction, fooRequest))
51+
Optional<Integer> responseStatus = route.route(getFooRequest)
52+
.map(handlerFunction -> handle(handlerFunction, getFooRequest))
5153
.map(ServerResponse::statusCode)
5254
.map(HttpStatus::value);
5355
assertEquals(200, responseStatus.get().intValue());
5456

57+
servletRequest = new MockHttpServletRequest("HEAD", "/foo");
58+
ServerRequest headFooRequest = new DefaultServerRequest(servletRequest, emptyList());
59+
60+
responseStatus = route.route(headFooRequest)
61+
.map(handlerFunction -> handle(handlerFunction, getFooRequest))
62+
.map(ServerResponse::statusCode)
63+
.map(HttpStatus::value);
64+
assertEquals(202, responseStatus.get().intValue());
65+
5566
servletRequest = new MockHttpServletRequest("POST", "/");
5667
servletRequest.setContentType("text/plain");
5768
ServerRequest barRequest = new DefaultServerRequest(servletRequest, emptyList());

0 commit comments

Comments
 (0)