org.springframework.web.reactive.handler

## Class AbstractHandlerMapping

- java.lang.Object
- - org.springframework.context.support.ApplicationObjectSupport
  - - org.springframework.web.reactive.handler.AbstractHandlerMapping

- All Implemented Interfaces:
    Aware, BeanNameAware, ApplicationContextAware, Ordered, HandlerMapping
  Direct Known Subclasses:
    AbstractHandlerMethodMapping, AbstractUrlHandlerMapping, RouterFunctionMapping

      public abstract class AbstractHandlerMapping
      extends ApplicationObjectSupport
      implements HandlerMapping, Ordered, BeanNameAware

  Abstract base class for `HandlerMapping` implementations.
  Since:
    5.0
  Author:
    Rossen Stoyanchev, Juergen Hoeller, Brian Clozel

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected Log` | `mappingsLogger` Dedicated "hidden" logger for request mappings.

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

      `logger`

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

      `BEST_MATCHING_HANDLER_ATTRIBUTE, BEST_MATCHING_PATTERN_ATTRIBUTE, 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
    `AbstractHandlerMapping()`

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected String` | `formatMappingName()`
    `protected CorsConfiguration` | `getCorsConfiguration(Object handler, ServerWebExchange exchange)` Retrieve the CORS configuration for the given handler.
    `CorsProcessor` | `getCorsProcessor()` Return the configured `CorsProcessor`.
    `reactor.core.publisher.Mono<Object>` | `getHandler(ServerWebExchange exchange)` Return a handler for this request.
    `protected abstract reactor.core.publisher.Mono<?>` | `getHandlerInternal(ServerWebExchange exchange)` Look up a handler for the given request, returning an empty `Mono` if no specific one is found.
    `int` | `getOrder()` Get the order value of this object.
    `PathPatternParser` | `getPathPatternParser()` Return the `PathPatternParser` instance that is used for `CORS configuration checks`.
    `protected boolean` | `hasCorsConfigurationSource(Object handler)` Return `true` if there is a `CorsConfigurationSource` for this handler.
    `void` | `setBeanName(String name)` Set the name of the bean in the bean factory that created this bean.
    `void` | `setCorsConfigurations(Map<String,CorsConfiguration> corsConfigurations)` Set the "global" CORS configurations based on URL patterns.
    `void` | `setCorsConfigurationSource(CorsConfigurationSource corsConfigurationSource)` Set the "global" CORS configuration source.
    `void` | `setCorsProcessor(CorsProcessor corsProcessor)` Configure a custom `CorsProcessor` to use to apply the matched `CorsConfiguration` for a request.
    `void` | `setOrder(int order)` Specify the order value for this HandlerMapping bean.
    `void` | `setUseCaseSensitiveMatch(boolean caseSensitiveMatch)` Shortcut method for setting the same property on the underlying pattern parser in use.
    `void` | `setUseTrailingSlashMatch(boolean trailingSlashMatch)` Shortcut method for setting the same property on the underlying pattern parser in use.

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

      `getApplicationContext, getMessageSourceAccessor, initApplicationContext, initApplicationContext, isContextRequired, obtainApplicationContext, requiredContextClass, setApplicationContext`

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

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

- - ### Field Detail

    - #### mappingsLogger

          protected final Log mappingsLogger

      Dedicated "hidden" logger for request mappings.

  - ### Constructor Detail

    - #### AbstractHandlerMapping

          public AbstractHandlerMapping()

  - ### Method Detail

    - #### setUseCaseSensitiveMatch

          public void setUseCaseSensitiveMatch(boolean caseSensitiveMatch)

      Shortcut method for setting the same property on the underlying pattern parser in use. For more details see:
      - `getPathPatternParser()` -- the underlying pattern parser
      - `PathPatternParser.setCaseSensitive(boolean)` -- the case sensitive slash option, including its default value.

      Note: aside from

    - #### setUseTrailingSlashMatch

          public void setUseTrailingSlashMatch(boolean trailingSlashMatch)

      Shortcut method for setting the same property on the underlying pattern parser in use. For more details see:
      - `getPathPatternParser()` -- the underlying pattern parser
      - `PathPatternParser.setMatchOptionalTrailingSeparator(boolean)` -- the trailing slash option, including its default value.

    - #### getPathPatternParser

          public PathPatternParser getPathPatternParser()

      Return the `PathPatternParser` instance that is used for `CORS configuration checks`. Subclasses can also use this pattern parser for their own request mapping purposes.

    - #### setCorsConfigurations

          public void setCorsConfigurations(Map<String,CorsConfiguration> corsConfigurations)

      Set the "global" CORS configurations based on URL patterns. By default, the first matching URL pattern is combined with handler-level CORS configuration if any.
      See Also:
        `setCorsConfigurationSource(CorsConfigurationSource)`

    - #### setCorsConfigurationSource

          public void setCorsConfigurationSource(CorsConfigurationSource corsConfigurationSource)

      Set the "global" CORS configuration source. By default, the first matching URL pattern is combined with the CORS configuration for the handler, if any.
      Since:
        5.1
      See Also:
        `setCorsConfigurations(Map)`

    - #### setCorsProcessor

          public void setCorsProcessor(CorsProcessor corsProcessor)

      Configure a custom `CorsProcessor` to use to apply the matched `CorsConfiguration` for a request.

      By default an instance of `DefaultCorsProcessor` is used.

    - #### getCorsProcessor

          public CorsProcessor getCorsProcessor()

      Return the configured `CorsProcessor`.

    - #### setOrder

          public void setOrder(int order)

      Specify the order value for this HandlerMapping bean.

      The default value is `Ordered.LOWEST_PRECEDENCE`, meaning non-ordered.

      See Also:
        `Ordered.getOrder()`

    - #### getOrder

          public int getOrder()

      Description copied from interface: `Ordered`
      Get the order value of this object.

      Higher values are interpreted as lower priority. As a consequence, the object with the lowest value has the highest priority (somewhat analogous to Servlet `load-on-startup` values).

      Same order values will result in arbitrary sort positions for the affected objects.

      Specified by:
        `getOrder` in interface `Ordered`
      Returns:
        the order value
      See Also:
        `Ordered.HIGHEST_PRECEDENCE`, `Ordered.LOWEST_PRECEDENCE`

    - #### setBeanName

          public void setBeanName(String name)

      Description copied from interface: `BeanNameAware`
      Set the name of the bean in the bean factory that created this bean.

      Invoked after population of normal bean properties but before an init callback such as `InitializingBean.afterPropertiesSet()` or a custom init-method.

      Specified by:
        `setBeanName` in interface `BeanNameAware`
      Parameters:
        `name` - the name of the bean in the factory. Note that this name is the actual bean name used in the factory, which may differ from the originally specified name: in particular for inner bean names, the actual bean name might have been made unique through appending "#..." suffixes. Use the `BeanFactoryUtils.originalBeanName(String)` method to extract the original bean name (without suffix), if desired.

    - #### formatMappingName

          protected String formatMappingName()

    - #### getHandler

          public reactor.core.publisher.Mono<Object> getHandler(ServerWebExchange exchange)

      Description copied from interface: `HandlerMapping`
      Return a handler for this request.

      Before returning a handler, an implementing method should check for CORS configuration associated with the handler, apply validation checks based on it, and update the response accordingly. For pre-flight requests, the same should be done based on the handler matching to the expected actual request.

      Specified by:
        `getHandler` in interface `HandlerMapping`
      Parameters:
        `exchange` - current server exchange
      Returns:
        a `Mono` that emits one value or none in case the request cannot be resolved to a handler

    - #### getHandlerInternal

          protected abstract reactor.core.publisher.Mono<?> getHandlerInternal(ServerWebExchange exchange)

      Look up a handler for the given request, returning an empty `Mono` if no specific one is found. This method is called by `getHandler(org.springframework.web.server.ServerWebExchange)`.

      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.

      Parameters:
        `exchange` - current exchange
      Returns:
        `Mono` for the matching handler, if any

    - #### hasCorsConfigurationSource

          protected boolean hasCorsConfigurationSource(Object handler)

      Return `true` if there is a `CorsConfigurationSource` for this handler.
      Since:
        5.2

    - #### getCorsConfiguration

          @Nullable
          protected CorsConfiguration getCorsConfiguration(Object handler,
                                                                     ServerWebExchange exchange)

      Retrieve the CORS configuration for the given handler.
      Parameters:
        `handler` - the handler to check (never `null`)
        `exchange` - the current exchange
      Returns:
        the CORS configuration for the handler, or `null` if none