public class RequestMappingHandlerMapping extends RequestMappingInfoHandlerMapping implements MatchableHandlerMapping, EmbeddedValueResolverAware
RequestMappingInfo instances from type and method-level
@RequestMapping annotations in
@Controller classes.loggerBEST_MATCHING_HANDLER_ATTRIBUTE, BEST_MATCHING_PATTERN_ATTRIBUTE, INTROSPECT_TYPE_LEVEL_MAPPING, MATRIX_VARIABLES_ATTRIBUTE, PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE, PRODUCIBLE_MEDIA_TYPES_ATTRIBUTE, URI_TEMPLATE_VARIABLES_ATTRIBUTEHIGHEST_PRECEDENCE, LOWEST_PRECEDENCE| Constructor and Description |
|---|
RequestMappingHandlerMapping() |
| Modifier and Type | Method and Description |
|---|---|
void |
afterPropertiesSet()
Detects handler methods at initialization.
|
protected RequestMappingInfo |
createRequestMappingInfo(RequestMapping requestMapping,
RequestCondition<?> customCondition)
Create a
RequestMappingInfo from the supplied
@RequestMapping annotation, which is either
a directly declared annotation, a meta-annotation, or the synthesized
result of merging annotation attributes within an annotation hierarchy. |
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. |
Map<String,Predicate<Class<?>>> |
getPathPrefixes()
The configured path prefixes as a read-only, possibly empty map.
|
protected CorsConfiguration |
initCorsConfiguration(Object handler,
Method method,
RequestMappingInfo mappingInfo)
Extract and return the CORS configuration for the mapping.
|
protected boolean |
isHandler(Class<?> beanType)
Whether the given type is a handler with handler methods.
|
RequestMatchResult |
match(HttpServletRequest request,
String pattern)
Determine whether the given request matches the request criteria.
|
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 |
setPathPrefixes(Map<String,Predicate<Class<?>>> prefixes)
Configure path prefixes to apply to controller methods.
|
void |
setUseRegisteredSuffixPatternMatch(boolean useRegisteredSuffixPatternMatch)
Whether suffix pattern matching should work only against path extensions
explicitly registered with the
ContentNegotiationManager. |
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, handleNoMatchcreateHandlerMethod, detectHandlerMethods, getCandidateBeanNames, getCorsConfiguration, getHandlerInternal, getHandlerMethods, getHandlerMethodsForMappingName, getNamingStrategy, handlerMethodsInitialized, initHandlerMethods, lookupHandlerMethod, processCandidateBean, registerHandlerMethod, registerMapping, setDetectHandlerMethodsInAncestorContexts, setHandlerMethodMappingNamingStrategy, unregisterMappingadaptInterceptor, detectMappedInterceptors, extendInterceptors, formatMappingName, getAdaptedInterceptors, getCorsConfigurations, getCorsHandlerExecutionChain, getCorsProcessor, getDefaultHandler, getHandler, getHandlerExecutionChain, getMappedInterceptors, getOrder, getPathMatcher, getUrlPathHelper, initApplicationContext, initInterceptors, setAlwaysUseFullPath, setBeanName, setCorsConfigurations, setCorsConfigurationSource, setCorsProcessor, setDefaultHandler, setInterceptors, setOrder, setPathMatcher, setRemoveSemicolonContent, setUrlDecode, setUrlPathHelpergetServletContext, getTempDir, getWebApplicationContext, initApplicationContext, initServletContext, isContextRequired, setServletContextgetApplicationContext, getMessageSourceAccessor, obtainApplicationContext, requiredContextClass, setApplicationContextclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitgetHandlerpublic 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 useRegisteredSuffixPatternMatch)
ContentNegotiationManager. This
is generally recommended to reduce ambiguity and to avoid issues such as
when a "." appears in the path for other reasons.
By default this is set to "false".
public void setUseTrailingSlashMatch(boolean useTrailingSlashMatch)
The default value is true.
public void setPathPrefixes(Map<String,Predicate<Class<?>>> prefixes)
Prefixes are used to enrich the mappings of every @RequestMapping
method whose controller type is matched by the corresponding
Predicate. The prefix for the first matching predicate is used.
Consider using HandlerTypePredicate to group controllers.
prefixes - a map with path prefixes as keypublic Map<String,Predicate<Class<?>>> getPathPrefixes()
public void setContentNegotiationManager(ContentNegotiationManager contentNegotiationManager)
ContentNegotiationManager to use to determine requested media types.
If not set, the default constructor is used.public ContentNegotiationManager getContentNegotiationManager()
ContentNegotiationManager.public void setEmbeddedValueResolver(StringValueResolver resolver)
EmbeddedValueResolverAwaresetEmbeddedValueResolver in interface EmbeddedValueResolverAwarepublic void afterPropertiesSet()
AbstractHandlerMethodMappingafterPropertiesSet in interface InitializingBeanafterPropertiesSet in class AbstractHandlerMethodMapping<RequestMappingInfo>AbstractHandlerMethodMapping.initHandlerMethods()public boolean useSuffixPatternMatch()
public boolean useRegisteredSuffixPatternMatch()
public boolean useTrailingSlashMatch()
@Nullable public List<String> getFileExtensions()
protected boolean isHandler(Class<?> beanType)
Expects a handler to have either a type-level @Controller
annotation or a type-level @RequestMapping annotation.
isHandler in class AbstractHandlerMethodMapping<RequestMappingInfo>beanType - the type of the bean being checked@Nullable protected RequestMappingInfo getMappingForMethod(Method method, 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)@Nullable protected RequestCondition<?> getCustomTypeCondition(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@Nullable protected RequestCondition<?> getCustomMethodCondition(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 conditionnullprotected RequestMappingInfo createRequestMappingInfo(RequestMapping requestMapping, @Nullable RequestCondition<?> customCondition)
RequestMappingInfo from the supplied
@RequestMapping annotation, which is either
a directly declared annotation, a meta-annotation, or the synthesized
result of merging annotation attributes within an annotation hierarchy.protected String[] resolveEmbeddedValuesInPatterns(String[] patterns)
public RequestMatchResult match(HttpServletRequest request, String pattern)
MatchableHandlerMappingmatch in interface MatchableHandlerMappingrequest - the current requestpattern - the pattern to matchnull if noneprotected CorsConfiguration initCorsConfiguration(Object handler, Method method, RequestMappingInfo mappingInfo)
AbstractHandlerMethodMappinginitCorsConfiguration in class AbstractHandlerMethodMapping<RequestMappingInfo>