Class RouterFunctionMapping

All Implemented Interfaces:
Aware, BeanNameAware, InitializingBean, ApplicationContextAware, Ordered, ServletContextAware, MatchableHandlerMapping, HandlerMapping

public class RouterFunctionMapping extends AbstractHandlerMapping implements InitializingBean, MatchableHandlerMapping
HandlerMapping implementation that supports RouterFunctions.

If no RouterFunction is provided at construction time, this mapping will detect all router functions in the application context, and consult them in order.

Since:
5.2
Author:
Arjen Poutsma, Sebastien Deleuze, Brian Clozel
  • Constructor Details

    • RouterFunctionMapping

      public RouterFunctionMapping()
      Create an empty RouterFunctionMapping.

      If this constructor is used, this mapping will detect all RouterFunction instances available in the application context.

    • RouterFunctionMapping

      public RouterFunctionMapping(RouterFunction<?> routerFunction)
      Create a RouterFunctionMapping with the given RouterFunction.

      If this constructor is used, no application context detection will occur.

      Parameters:
      routerFunction - the router function to use for mapping
  • Method Details

    • setRouterFunction

      public void setRouterFunction(@Nullable RouterFunction<?> routerFunction)
      Set the router function to map to.

      If this property is used, no application context detection will occur.

    • getRouterFunction

      @Nullable public RouterFunction<?> getRouterFunction()
      Return the configured RouterFunction.

      Note: When router functions are detected from the ApplicationContext, this method may return null if invoked prior to afterPropertiesSet().

      Returns:
      the router function or null
    • setMessageConverters

      public void setMessageConverters(List<HttpMessageConverter<?>> messageConverters)
      Set the message body converters to use.

      These converters are used to convert from and to HTTP requests and responses.

    • setDetectHandlerFunctionsInAncestorContexts

      public void setDetectHandlerFunctionsInAncestorContexts(boolean detectHandlerFunctionsInAncestorContexts)
      Set whether to detect handler functions in ancestor ApplicationContexts.

      Default is "false": Only handler functions in the current ApplicationContext will be detected, i.e. only in the context that this HandlerMapping itself is defined in (typically the current DispatcherServlet's context).

      Switch this flag on to detect handler beans in ancestor contexts (typically the Spring root WebApplicationContext) as well.

    • afterPropertiesSet

      public void afterPropertiesSet() throws Exception
      Description copied from interface: InitializingBean
      Invoked by the containing BeanFactory after it has set all bean properties and satisfied BeanFactoryAware, ApplicationContextAware etc.

      This method allows the bean instance to perform validation of its overall configuration and final initialization when all bean properties have been set.

      Specified by:
      afterPropertiesSet in interface InitializingBean
      Throws:
      Exception - in the event of misconfiguration (such as failure to set an essential property) or if initialization fails for any other reason
    • getHandlerInternal

      @Nullable protected Object getHandlerInternal(HttpServletRequest servletRequest) throws Exception
      Description copied from class: AbstractHandlerMapping
      Look up a handler for the given request, returning null if no specific one is found. This method is called by AbstractHandlerMapping.getHandler(jakarta.servlet.http.HttpServletRequest); a null return value will lead to the default handler, if one is set.

      On CORS pre-flight requests this method should return a match not for the pre-flight request but for the expected actual request based on the URL path, the HTTP methods from the "Access-Control-Request-Method" header, and the headers from the "Access-Control-Request-Headers" header thus allowing the CORS configuration to be obtained via AbstractHandlerMapping.getCorsConfiguration(Object, HttpServletRequest),

      Note: This method may also return a pre-built HandlerExecutionChain, combining a handler object with dynamically determined interceptors. Statically specified interceptors will get merged into such an existing chain.

      Specified by:
      getHandlerInternal in class AbstractHandlerMapping
      Parameters:
      servletRequest - current HTTP request
      Returns:
      the corresponding handler instance, or null if none found
      Throws:
      Exception - if there is an internal error
    • match

      @Nullable public RequestMatchResult match(HttpServletRequest request, String pattern)
      Description copied from interface: MatchableHandlerMapping
      Determine whether the request matches the given pattern. Use this method when MatchableHandlerMapping.getPatternParser() returns null which means that the HandlerMapping is using String pattern matching.
      Specified by:
      match in interface MatchableHandlerMapping
      Parameters:
      request - the current request
      pattern - the pattern to match
      Returns:
      the result from request matching, or null if none