org.springframework.web.servlet.function.support

## Class RouterFunctionMapping

- java.lang.Object
- - org.springframework.context.support.ApplicationObjectSupport
  - - org.springframework.web.context.support.WebApplicationObjectSupport
    - - org.springframework.web.servlet.handler.AbstractHandlerMapping
      - - org.springframework.web.servlet.function.support.RouterFunctionMapping

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

      public class RouterFunctionMapping
      extends AbstractHandlerMapping
      implements InitializingBean

  `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

- - ### Field Summary

    - ### Fields inherited from class org.springframework.web.servlet.handler.AbstractHandlerMapping

      `mappingsLogger`

    - ### Fields inherited from class org.springframework.context.support.ApplicationObjectSupport

      `logger`

    - ### Fields inherited from interface org.springframework.web.servlet.HandlerMapping

      `BEST_MATCHING_HANDLER_ATTRIBUTE, BEST_MATCHING_PATTERN_ATTRIBUTE, INTROSPECT_TYPE_LEVEL_MAPPING, LOOKUP_PATH, MATRIX_VARIABLES_ATTRIBUTE, PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE, PRODUCIBLE_MEDIA_TYPES_ATTRIBUTE, URI_TEMPLATE_VARIABLES_ATTRIBUTE`

    - ### Fields inherited from interface org.springframework.core.Ordered

      `HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `RouterFunctionMapping()` Create an empty `RouterFunctionMapping`.
    `RouterFunctionMapping(RouterFunction<?> routerFunction)` Create a `RouterFunctionMapping` with the given `RouterFunction`.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `afterPropertiesSet()` Invoked by the containing `BeanFactory` after it has set all bean properties and satisfied `BeanFactoryAware`, `ApplicationContextAware` etc.
    `protected Object` | `getHandlerInternal(HttpServletRequest servletRequest)` Look up a handler for the given request, returning `null` if no specific one is found.
    `RouterFunction<?>` | `getRouterFunction()` Return the configured `RouterFunction`.
    `void` | `setDetectHandlerFunctionsInAncestorContexts(boolean detectHandlerFunctionsInAncestorContexts)` Set whether to detect handler functions in ancestor ApplicationContexts.
    `void` | `setMessageConverters(List<HttpMessageConverter<?>> messageConverters)` Set the message body converters to use.
    `void` | `setRouterFunction(RouterFunction<?> routerFunction)` Set the router function to map to.

    - ### Methods inherited from class org.springframework.web.servlet.handler.AbstractHandlerMapping

      `adaptInterceptor, detectMappedInterceptors, extendInterceptors, formatMappingName, getAdaptedInterceptors, getCorsConfiguration, getCorsConfigurationSource, getCorsHandlerExecutionChain, getCorsProcessor, getDefaultHandler, getHandler, getHandlerExecutionChain, getMappedInterceptors, getOrder, getPathMatcher, getPatternParser, getUrlPathHelper, hasCorsConfigurationSource, initApplicationContext, initInterceptors, initLookupPath, setAlwaysUseFullPath, setBeanName, setCorsConfigurations, setCorsConfigurationSource, setCorsProcessor, setDefaultHandler, setInterceptors, setOrder, setPathMatcher, setPatternParser, setRemoveSemicolonContent, setUrlDecode, setUrlPathHelper, usesPathPatterns`

    - ### Methods inherited from class org.springframework.web.context.support.WebApplicationObjectSupport

      `getServletContext, getTempDir, getWebApplicationContext, initApplicationContext, initServletContext, isContextRequired, setServletContext`

    - ### Methods inherited from class org.springframework.context.support.ApplicationObjectSupport

      `getApplicationContext, getMessageSourceAccessor, obtainApplicationContext, requiredContextClass, setApplicationContext`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### 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 Detail

    - #### 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(javax.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