org.springframework.web.servlet.mvc.method.annotation

## Class RequestMappingHandlerMapping

- java.lang.Object
- - org.springframework.context.support.ApplicationObjectSupport
  - - org.springframework.web.context.support.WebApplicationObjectSupport
    - - org.springframework.web.servlet.handler.AbstractHandlerMapping
      - - org.springframework.web.servlet.handler.AbstractHandlerMethodMapping<RequestMappingInfo>
        - - org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping
          - - org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping

All Implemented Interfaces:
  Aware, InitializingBean, ApplicationContextAware, EmbeddedValueResolverAware, Ordered, ServletContextAware, HandlerMapping

    public class RequestMappingHandlerMapping
    extends RequestMappingInfoHandlerMapping
    implements EmbeddedValueResolverAware

Creates `RequestMappingInfo` instances from type and method-level `@RequestMapping` annotations in `@Controller` classes.

Since:
  3.1
Author:
  Arjen Poutsma, Rossen Stoyanchev

### Field Summary

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

`logger`

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

`BEST_MATCHING_PATTERN_ATTRIBUTE, INTROSPECT_TYPE_LEVEL_MAPPING, 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
`RequestMappingHandlerMapping()`

### Method Summary

Methods
`void` `afterPropertiesSet()` Detects handler methods at initialization.
`ContentNegotiationManager` `getContentNegotiationManager()` Return the configured `ContentNegotiationManager`.
`protected RequestCondition<?>` `getCustomMethodCondition(Method method)` Provide a custom method-level request condition.
`protected RequestCondition<?>` `getCustomTypeCondition(Class<?> handlerType)` Provide a custom type-level request condition.
`List<String>` `getFileExtensions()` Return the file extensions to use for suffix pattern matching.
`protected RequestMappingInfo` `getMappingForMethod(Method method, Class<?> handlerType)` Uses method and type-level @`RequestMapping` annotations to create the RequestMappingInfo.
`protected boolean` `isHandler(Class<?> beanType)` Whether the given type is a handler with handler methods.
`protected String[]` `resolveEmbeddedValuesInPatterns(String[] patterns)` Resolve placeholder values in the given array of patterns.
`void` `setContentNegotiationManager(ContentNegotiationManager contentNegotiationManager)` Set the `ContentNegotiationManager` to use to determine requested media types.
`void` `setEmbeddedValueResolver(StringValueResolver resolver)` Set the StringValueResolver to use for resolving embedded definition values.
`void` `setUseRegisteredSuffixPatternMatch(boolean useRegsiteredSuffixPatternMatch)` Whether to use suffix pattern match for registered file extensions only when matching patterns to requests.
`void` `setUseSuffixPatternMatch(boolean useSuffixPatternMatch)` Whether to use suffix pattern match (".*") when matching patterns to requests.
`void` `setUseTrailingSlashMatch(boolean useTrailingSlashMatch)` Whether to match to URLs irrespective of the presence of a trailing slash.
`boolean` `useRegisteredSuffixPatternMatch()` Whether to use registered suffixes for pattern matching.
`boolean` `useSuffixPatternMatch()` Whether to use suffix pattern matching.
`boolean` `useTrailingSlashMatch()` Whether to match to URLs irrespective of the presence of a trailing slash.

### Methods inherited from class org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping

`getMappingComparator, getMappingPathPatterns, getMatchingMapping, handleMatch, handleNoMatch`

### Methods inherited from class org.springframework.web.servlet.handler.AbstractHandlerMethodMapping

`createHandlerMethod, detectHandlerMethods, getHandlerInternal, getHandlerMethods, handlerMethodsInitialized, initHandlerMethods, lookupHandlerMethod, registerHandlerMethod, setDetectHandlerMethodsInAncestorContexts`

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

`adaptInterceptor, detectMappedInterceptors, extendInterceptors, getAdaptedInterceptors, getDefaultHandler, getHandler, getHandlerExecutionChain, getMappedInterceptors, getOrder, getPathMatcher, getUrlPathHelper, initApplicationContext, initInterceptors, setAlwaysUseFullPath, setDefaultHandler, setInterceptors, setOrder, setPathMatcher, setRemoveSemicolonContent, setUrlDecode, setUrlPathHelper`

### 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, requiredContextClass, setApplicationContext`

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

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

### Constructor Detail

#### RequestMappingHandlerMapping

    public RequestMappingHandlerMapping()

### Method Detail

#### setUseSuffixPatternMatch

    public void setUseSuffixPatternMatch(boolean useSuffixPatternMatch)

Whether to use suffix pattern match (".*") when matching patterns to requests. If enabled a method mapped to "/users" also matches to "/users.*".

The default value is `true`.

Also see `setUseRegisteredSuffixPatternMatch(boolean)` for more fine-grained control over specific suffixes to allow.

#### setUseRegisteredSuffixPatternMatch

    public void setUseRegisteredSuffixPatternMatch(boolean useRegsiteredSuffixPatternMatch)

Whether to use suffix pattern match for registered file extensions only when matching patterns to requests.

If enabled, a controller method mapped to "/users" also matches to "/users.json" assuming ".json" is a file extension registered with the provided `contentNegotiationManager`. This can be useful for allowing only specific URL extensions to be used as well as in cases where a "." in the URL path can lead to ambiguous interpretation of path variable content, (e.g. given "/users/{user}" and incoming URLs such as "/users/john.j.joe" and "/users/john.j.joe.json").

If enabled, this flag also enables `useSuffixPatternMatch`. The default value is `false`.

#### setUseTrailingSlashMatch

    public void setUseTrailingSlashMatch(boolean useTrailingSlashMatch)

Whether to match to URLs irrespective of the presence of a trailing slash. If enabled a method mapped to "/users" also matches to "/users/".

The default value is `true`.

#### setEmbeddedValueResolver

    public void setEmbeddedValueResolver(StringValueResolver resolver)

Description copied from interface: `EmbeddedValueResolverAware`
Set the StringValueResolver to use for resolving embedded definition values.

Specified by:
  `setEmbeddedValueResolver` in interface `EmbeddedValueResolverAware`

#### setContentNegotiationManager

    public void setContentNegotiationManager(ContentNegotiationManager contentNegotiationManager)

Set the `ContentNegotiationManager` to use to determine requested media types. If not set, the default constructor is used.

#### useSuffixPatternMatch

    public boolean useSuffixPatternMatch()

Whether to use suffix pattern matching.

#### useRegisteredSuffixPatternMatch

    public boolean useRegisteredSuffixPatternMatch()

Whether to use registered suffixes for pattern matching.

#### useTrailingSlashMatch

    public boolean useTrailingSlashMatch()

Whether to match to URLs irrespective of the presence of a trailing slash.

#### getContentNegotiationManager

    public ContentNegotiationManager getContentNegotiationManager()

Return the configured `ContentNegotiationManager`.

#### getFileExtensions

    public List<String> getFileExtensions()

Return the file extensions to use for suffix pattern matching.

#### afterPropertiesSet

    public void afterPropertiesSet()

Description copied from class: `AbstractHandlerMethodMapping`
Detects handler methods at initialization.

Specified by:
  `afterPropertiesSet` in interface `InitializingBean`
Overrides:
  `afterPropertiesSet` in class `AbstractHandlerMethodMapping<RequestMappingInfo>`

#### isHandler

    protected boolean isHandler(Class<?> beanType)

Whether the given type is a handler with handler methods. Expects a handler to have a type-level @`Controller` annotation.

Specified by:
  `isHandler` in class `AbstractHandlerMethodMapping<RequestMappingInfo>`
Parameters:
  `beanType` - the type of the bean being checked
Returns:
  "true" if this a handler type, "false" otherwise.

#### getMappingForMethod

    protected RequestMappingInfo getMappingForMethod(Method method,
                                         Class<?> handlerType)

Uses method and type-level @`RequestMapping` annotations to create the RequestMappingInfo.

Specified by:
  `getMappingForMethod` in class `AbstractHandlerMethodMapping<RequestMappingInfo>`
Parameters:
  `method` - the method to provide a mapping for
  `handlerType` - the handler type, possibly a sub-type of the method's declaring class
Returns:
  the created RequestMappingInfo, or `null` if the method does not have a `@RequestMapping` annotation.
See Also:
  `getCustomMethodCondition(Method)`, `getCustomTypeCondition(Class)`

#### getCustomTypeCondition

    protected RequestCondition<?> getCustomTypeCondition(Class<?> handlerType)

Provide a custom type-level request condition. The custom `RequestCondition` can be of any type so long as the same condition type is returned from all calls to this method in order to ensure custom request conditions can be combined and compared.

Consider extending `AbstractRequestCondition` for custom condition types and using `CompositeRequestCondition` to provide multiple custom conditions.

Parameters:
  `handlerType` - the handler type for which to create the condition
Returns:
  the condition, or `null`

#### getCustomMethodCondition

    protected RequestCondition<?> getCustomMethodCondition(Method method)

Provide a custom method-level request condition. The custom `RequestCondition` can be of any type so long as the same condition type is returned from all calls to this method in order to ensure custom request conditions can be combined and compared.

Consider extending `AbstractRequestCondition` for custom condition types and using `CompositeRequestCondition` to provide multiple custom conditions.

Parameters:
  `method` - the handler method for which to create the condition
Returns:
  the condition, or `null`

#### resolveEmbeddedValuesInPatterns

    protected String[] resolveEmbeddedValuesInPatterns(String[] patterns)

Resolve placeholder values in the given array of patterns.

Returns:
  a new array with updated patterns