Class RouterFunctions
RouterFunction using a discoverable builder-style API, to
 create a RouterFunction
 given a RequestPredicate and HandlerFunction, and to do further
 subrouting on an existing routing
 function.
 Additionally, this class can transform
 a RouterFunction into an HttpHandler, which can be run in Servlet
 environments, Reactor, or Undertow.
- Since:
- 5.0
- Author:
- Arjen Poutsma
- 
Nested Class SummaryNested ClassesModifier and TypeClassDescriptionstatic interfaceRepresents a discoverable builder for router functions.static interfaceReceives notifications from the logical structure of router functions.
- 
Field SummaryFieldsModifier and TypeFieldDescriptionstatic final StringName of theattributethat contains the matching pattern, as aPathPattern.static final StringName of theServerWebExchangeattribute that contains theServerRequest.static final StringName of theServerWebExchangeattribute that contains the URI templates map, mapping variable names to values.
- 
Constructor SummaryConstructors
- 
Method SummaryModifier and TypeMethodDescriptionstatic <T extends ServerResponse>
 RouterFunction<T>changeParser(RouterFunction<T> routerFunction, PathPatternParser parser) Changes thePathPatternParseron the given router function.static <T extends ServerResponse>
 RouterFunction<T>nest(RequestPredicate predicate, RouterFunction<T> routerFunction) Route to the given router function if the given request predicate applies.static Function<ServerRequest,reactor.core.publisher.Mono<Resource>> resourceLookupFunction(String pattern, Resource location) Returns the resource lookup function used byresources(String, Resource).static RouterFunction<ServerResponse>Route requests that match the given pattern to resources relative to the given root location.static RouterFunction<ServerResponse>resources(Function<ServerRequest, reactor.core.publisher.Mono<Resource>> lookupFunction) Route to resources using the provided lookup function.static RouterFunctions.Builderroute()Offers a discoverable way to create router functions through a builder-style interface.static <T extends ServerResponse>
 RouterFunction<T>route(RequestPredicate predicate, HandlerFunction<T> handlerFunction) Route to the given handler function if the given request predicate applies.static HttpHandlertoHttpHandler(RouterFunction<?> routerFunction) Convert the given router function into aHttpHandler.static HttpHandlertoHttpHandler(RouterFunction<?> routerFunction, HandlerStrategies strategies) Convert the given router function into aHttpHandler, using the given strategies.static WebHandlertoWebHandler(RouterFunction<?> routerFunction) Convert the given router function into aWebHandler.static WebHandlertoWebHandler(RouterFunction<?> routerFunction, HandlerStrategies strategies) Convert the given router function into aWebHandler, using the given strategies.
- 
Field Details- 
REQUEST_ATTRIBUTEName of theServerWebExchangeattribute that contains theServerRequest.
- 
URI_TEMPLATE_VARIABLES_ATTRIBUTEName of theServerWebExchangeattribute that contains the URI templates map, mapping variable names to values.
- 
MATCHING_PATTERN_ATTRIBUTEName of theattributethat contains the matching pattern, as aPathPattern.
 
- 
- 
Constructor Details- 
RouterFunctionspublic RouterFunctions()
 
- 
- 
Method Details- 
routeOffers a discoverable way to create router functions through a builder-style interface.- Returns:
- a router function builder
- Since:
- 5.1
 
- 
routepublic static <T extends ServerResponse> RouterFunction<T> route(RequestPredicate predicate, HandlerFunction<T> handlerFunction) Route to the given handler function if the given request predicate applies.For instance, the following example routes GET requests for "/user" to the listUsersmethod inuserController:RouterFunction<ServerResponse> route = RouterFunctions.route(RequestPredicates.GET("/user"), userController::listUsers);- Type Parameters:
- T- the type of response returned by the handler function
- Parameters:
- predicate- the predicate to test
- handlerFunction- the handler function to route to if the predicate applies
- Returns:
- a router function that routes to handlerFunctionifpredicateevaluates totrue
- See Also:
 
- 
nestpublic static <T extends ServerResponse> RouterFunction<T> nest(RequestPredicate predicate, RouterFunction<T> routerFunction) Route to the given router function if the given request predicate applies. This method can be used to create nested routes, where a group of routes share a common path (prefix), header, or other request predicate.For instance, the following example first creates a composed route that resolves to listUsersfor a GET, andcreateUserfor a POST. This composed route then gets nested with a "/user" path predicate, so that GET requests for "/user" will list users, and POST request for "/user" will create a new user.RouterFunction<ServerResponse> userRoutes = RouterFunctions.route(RequestPredicates.method(HttpMethod.GET), this::listUsers) .andRoute(RequestPredicates.method(HttpMethod.POST), this::createUser); RouterFunction<ServerResponse> nestedRoute = RouterFunctions.nest(RequestPredicates.path("/user"), userRoutes);- Type Parameters:
- T- the type of response returned by the handler function
- Parameters:
- predicate- the predicate to test
- routerFunction- the nested router function to delegate to if the predicate applies
- Returns:
- a router function that routes to routerFunctionifpredicateevaluates totrue
- See Also:
 
- 
resourcesRoute requests that match the given pattern to resources relative to the given root location. For instanceResource location = new FileSystemResource("public-resources/"); RouterFunction<ServerResponse> resources = RouterFunctions.resources("/resources/**", location);- Parameters:
- pattern- the pattern to match
- location- the location directory relative to which resources should be resolved
- Returns:
- a router function that routes to resources
- See Also:
 
- 
resourceLookupFunctionpublic static Function<ServerRequest,reactor.core.publisher.Mono<Resource>> resourceLookupFunction(String pattern, Resource location) Returns the resource lookup function used byresources(String, Resource). The returned function can be composed on, for instance to return a default resource when the lookup function does not match:Mono<Resource> defaultResource = Mono.just(new ClassPathResource("index.html")); Function<ServerRequest, Mono<Resource>> lookupFunction = RouterFunctions.resourceLookupFunction("/resources/**", new FileSystemResource("public-resources/")) .andThen(resourceMono -> resourceMono.switchIfEmpty(defaultResource)); RouterFunction<ServerResponse> resources = RouterFunctions.resources(lookupFunction);- Parameters:
- pattern- the pattern to match
- location- the location directory relative to which resources should be resolved
- Returns:
- the default resource lookup function for the given parameters.
 
- 
resourcespublic static RouterFunction<ServerResponse> resources(Function<ServerRequest, reactor.core.publisher.Mono<Resource>> lookupFunction) Route to resources using the provided lookup function. If the lookup function provides aResourcefor the given request, it will be it will be exposed using aHandlerFunctionthat handles GET, HEAD, and OPTIONS requests.- Parameters:
- lookupFunction- the function to provide a- Resourcegiven the- ServerRequest
- Returns:
- a router function that routes to resources
 
- 
toHttpHandlerConvert the given router function into aHttpHandler. This conversion uses default strategies.The returned handler can be adapted to run in - Servlet environments using the
 ServletHttpHandlerAdapter,
- Reactor using the
 ReactorHttpHandlerAdapter,
- Undertow using the
 UndertowHttpHandlerAdapter.
 Note that HttpWebHandlerAdapteralso implementsWebHandler, allowing for additional filter and exception handler registration throughWebHttpHandlerBuilder.- Parameters:
- routerFunction- the router function to convert
- Returns:
- an http handler that handles HTTP request using the given router function
 
- Servlet environments using the
 
- 
toHttpHandlerpublic static HttpHandler toHttpHandler(RouterFunction<?> routerFunction, HandlerStrategies strategies) Convert the given router function into aHttpHandler, using the given strategies.The returned HttpHandlercan be adapted to run in- Servlet environments using the
 ServletHttpHandlerAdapter,
- Reactor using the
 ReactorHttpHandlerAdapter,
- Undertow using the
 UndertowHttpHandlerAdapter.
 - Parameters:
- routerFunction- the router function to convert
- strategies- the strategies to use
- Returns:
- an http handler that handles HTTP request using the given router function
 
- Servlet environments using the
 
- 
toWebHandler- Parameters:
- routerFunction- the router function to convert
- Returns:
- a web handler that handles web request using the given router function
 
- 
toWebHandlerpublic static WebHandler toWebHandler(RouterFunction<?> routerFunction, HandlerStrategies strategies) Convert the given router function into aWebHandler, using the given strategies.- Parameters:
- routerFunction- the router function to convert
- strategies- the strategies to use
- Returns:
- a web handler that handles web request using the given router function
 
- 
changeParserpublic static <T extends ServerResponse> RouterFunction<T> changeParser(RouterFunction<T> routerFunction, PathPatternParser parser) Changes thePathPatternParseron the given router function. This method can be used to change thePathPatternParserproperties from the defaults, for instance to change case sensitivity.- Type Parameters:
- T- the type of response returned by the handler function
- Parameters:
- routerFunction- the router function to change the parser in
- parser- the parser to change to.
- Returns:
- the change router function
 
 
-