public class RequestMappingHandlerMapping extends RequestMappingInfoHandlerMapping implements EmbeddedValueResolverAware
RequestMappingInfo
instances from type and method-level
@RequestMapping
annotations in
@Controller
classes.Modifier and Type | Field and Description |
---|---|
private ContentNegotiationManager |
contentNegotiationManager |
private StringValueResolver |
embeddedValueResolver |
private java.util.List<java.lang.String> |
fileExtensions |
private boolean |
useRegisteredSuffixPatternMatch |
private boolean |
useSuffixPatternMatch |
private boolean |
useTrailingSlashMatch |
logger
BEST_MATCHING_PATTERN_ATTRIBUTE, INTROSPECT_TYPE_LEVEL_MAPPING, MATRIX_VARIABLES_ATTRIBUTE, PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE, PRODUCIBLE_MEDIA_TYPES_ATTRIBUTE, URI_TEMPLATE_VARIABLES_ATTRIBUTE
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
Constructor and Description |
---|
RequestMappingHandlerMapping() |
Modifier and Type | Method and Description |
---|---|
void |
afterPropertiesSet()
Detects handler methods at initialization.
|
private RequestMappingInfo |
createRequestMappingInfo(RequestMapping annotation,
RequestCondition<?> customCondition)
Created a RequestMappingInfo from a RequestMapping annotation.
|
ContentNegotiationManager |
getContentNegotiationManager()
Return the configured
ContentNegotiationManager . |
protected RequestCondition<?> |
getCustomMethodCondition(java.lang.reflect.Method method)
Provide a custom method-level request condition.
|
protected RequestCondition<?> |
getCustomTypeCondition(java.lang.Class<?> handlerType)
Provide a custom type-level request condition.
|
java.util.List<java.lang.String> |
getFileExtensions()
Return the file extensions to use for suffix pattern matching.
|
protected RequestMappingInfo |
getMappingForMethod(java.lang.reflect.Method method,
java.lang.Class<?> handlerType)
Uses method and type-level @
RequestMapping annotations to create
the RequestMappingInfo. |
protected boolean |
isHandler(java.lang.Class<?> beanType)
Whether the given type is a handler with handler methods.
|
protected java.lang.String[] |
resolveEmbeddedValuesInPatterns(java.lang.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.
|
getMappingComparator, getMappingPathPatterns, getMatchingMapping, handleMatch, handleNoMatch
createHandlerMethod, detectHandlerMethods, getHandlerInternal, getHandlerMethods, handlerMethodsInitialized, initHandlerMethods, lookupHandlerMethod, registerHandlerMethod, setDetectHandlerMethodsInAncestorContexts
adaptInterceptor, detectMappedInterceptors, extendInterceptors, getAdaptedInterceptors, getDefaultHandler, getHandler, getHandlerExecutionChain, getMappedInterceptors, getOrder, getPathMatcher, getUrlPathHelper, initApplicationContext, initInterceptors, setAlwaysUseFullPath, setDefaultHandler, setInterceptors, setOrder, setPathMatcher, setRemoveSemicolonContent, setUrlDecode, setUrlPathHelper
getServletContext, getTempDir, getWebApplicationContext, initApplicationContext, initServletContext, isContextRequired, setServletContext
getApplicationContext, getMessageSourceAccessor, requiredContextClass, setApplicationContext
private boolean useSuffixPatternMatch
private boolean useRegisteredSuffixPatternMatch
private boolean useTrailingSlashMatch
private ContentNegotiationManager contentNegotiationManager
private final java.util.List<java.lang.String> fileExtensions
private StringValueResolver embeddedValueResolver
public void setUseSuffixPatternMatch(boolean useSuffixPatternMatch)
The default value is true
.
Also see setUseRegisteredSuffixPatternMatch(boolean)
for
more fine-grained control over specific suffixes to allow.
public void setUseRegisteredSuffixPatternMatch(boolean useRegsiteredSuffixPatternMatch)
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
.
public void setUseTrailingSlashMatch(boolean useTrailingSlashMatch)
The default value is true
.
public void setEmbeddedValueResolver(StringValueResolver resolver)
EmbeddedValueResolverAware
setEmbeddedValueResolver
in interface EmbeddedValueResolverAware
public void setContentNegotiationManager(ContentNegotiationManager contentNegotiationManager)
ContentNegotiationManager
to use to determine requested media types.
If not set, the default constructor is used.public boolean useSuffixPatternMatch()
public boolean useRegisteredSuffixPatternMatch()
public boolean useTrailingSlashMatch()
public ContentNegotiationManager getContentNegotiationManager()
ContentNegotiationManager
.public java.util.List<java.lang.String> getFileExtensions()
public void afterPropertiesSet()
AbstractHandlerMethodMapping
afterPropertiesSet
in interface InitializingBean
afterPropertiesSet
in class AbstractHandlerMethodMapping<RequestMappingInfo>
protected boolean isHandler(java.lang.Class<?> beanType)
Controller
annotation.isHandler
in class AbstractHandlerMethodMapping<RequestMappingInfo>
beanType
- the type of the bean being checkedprotected RequestMappingInfo getMappingForMethod(java.lang.reflect.Method method, java.lang.Class<?> handlerType)
RequestMapping
annotations to create
the RequestMappingInfo.getMappingForMethod
in class AbstractHandlerMethodMapping<RequestMappingInfo>
method
- the method to provide a mapping forhandlerType
- the handler type, possibly a sub-type of the method's
declaring classnull
if the method
does not have a @RequestMapping
annotation.getCustomMethodCondition(Method)
,
getCustomTypeCondition(Class)
protected RequestCondition<?> getCustomTypeCondition(java.lang.Class<?> handlerType)
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.
handlerType
- the handler type for which to create the conditionnull
protected RequestCondition<?> getCustomMethodCondition(java.lang.reflect.Method method)
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.
method
- the handler method for which to create the conditionnull
private RequestMappingInfo createRequestMappingInfo(RequestMapping annotation, RequestCondition<?> customCondition)
protected java.lang.String[] resolveEmbeddedValuesInPatterns(java.lang.String[] patterns)