T
- The mapping for a HandlerMethod
containing the conditions
needed to match the handler method to incoming request.public abstract class AbstractHandlerMethodMapping<T> extends AbstractHandlerMapping implements InitializingBean
HandlerMapping
implementations that define a
mapping between a request and a HandlerMethod
.
For each registered handler method, a unique mapping is maintained with
subclasses defining the details of the mapping type <T>
.
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 |
---|
AbstractHandlerMethodMapping() |
Modifier and Type | Method and Description |
---|---|
void |
afterPropertiesSet()
Detects handler methods at initialization.
|
protected HandlerMethod |
createHandlerMethod(java.lang.Object handler,
java.lang.reflect.Method method)
Create the HandlerMethod instance.
|
protected void |
detectHandlerMethods(java.lang.Object handler)
Look for handler methods in a handler.
|
protected HandlerMethod |
getHandlerInternal(HttpServletRequest request)
Look up a handler method for the given request.
|
java.util.Map<T,HandlerMethod> |
getHandlerMethods()
Return a map with all handler methods and their mappings.
|
java.util.List<HandlerMethod> |
getHandlerMethodsForMappingName(java.lang.String mappingName)
Return the handler methods mapped to the mapping with the given name.
|
protected abstract java.util.Comparator<T> |
getMappingComparator(HttpServletRequest request)
Return a comparator for sorting matching mappings.
|
protected abstract T |
getMappingForMethod(java.lang.reflect.Method method,
java.lang.Class<?> handlerType)
Provide the mapping for a handler method.
|
protected abstract java.util.Set<java.lang.String> |
getMappingPathPatterns(T mapping)
Extract and return the URL paths contained in a mapping.
|
protected abstract T |
getMatchingMapping(T mapping,
HttpServletRequest request)
Check if a mapping matches the current request and return a (potentially
new) mapping with conditions relevant to the current request.
|
protected void |
handleMatch(T mapping,
java.lang.String lookupPath,
HttpServletRequest request)
Invoked when a matching mapping is found.
|
protected HandlerMethod |
handleNoMatch(java.util.Set<T> mappings,
java.lang.String lookupPath,
HttpServletRequest request)
Invoked when no matching mapping is not found.
|
protected void |
handlerMethodsInitialized(java.util.Map<T,HandlerMethod> handlerMethods)
Invoked after all handler methods have been detected.
|
protected void |
initHandlerMethods()
Scan beans in the ApplicationContext, detect and register handler methods.
|
protected abstract boolean |
isHandler(java.lang.Class<?> beanType)
Whether the given type is a handler with handler methods.
|
protected HandlerMethod |
lookupHandlerMethod(java.lang.String lookupPath,
HttpServletRequest request)
Look up the best-matching handler method for the current request.
|
protected void |
registerHandlerMethod(java.lang.Object handler,
java.lang.reflect.Method method,
T mapping)
Register a handler method and its unique mapping.
|
void |
setDetectHandlerMethodsInAncestorContexts(boolean detectHandlerMethodsInAncestorContexts)
Whether to detect handler methods in beans in ancestor ApplicationContexts.
|
void |
setHandlerMethodMappingNamingStrategy(HandlerMethodMappingNamingStrategy<T> namingStrategy)
Configure the naming strategy to use for assigning a default name to every
mapped handler method.
|
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
public void setDetectHandlerMethodsInAncestorContexts(boolean detectHandlerMethodsInAncestorContexts)
Default is "false": Only beans in the current ApplicationContext are considered, 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.
public void setHandlerMethodMappingNamingStrategy(HandlerMethodMappingNamingStrategy<T> namingStrategy)
namingStrategy
- strategy to use.public java.util.Map<T,HandlerMethod> getHandlerMethods()
public java.util.List<HandlerMethod> getHandlerMethodsForMappingName(java.lang.String mappingName)
mappingName
- the mapping namepublic void afterPropertiesSet()
afterPropertiesSet
in interface InitializingBean
protected void initHandlerMethods()
protected abstract boolean isHandler(java.lang.Class<?> beanType)
beanType
- the type of the bean being checkedprotected void detectHandlerMethods(java.lang.Object handler)
handler
- the bean name of a handler or a handler instanceprotected abstract T getMappingForMethod(java.lang.reflect.Method method, java.lang.Class<?> handlerType)
method
- the method to provide a mapping forhandlerType
- the handler type, possibly a sub-type of the method's
declaring classnull
if the method is not mappedprotected void registerHandlerMethod(java.lang.Object handler, java.lang.reflect.Method method, T mapping)
handler
- the bean name of the handler or the handler instancemethod
- the method to registermapping
- the mapping conditions associated with the handler methodjava.lang.IllegalStateException
- if another method was already registered
under the same mappingprotected HandlerMethod createHandlerMethod(java.lang.Object handler, java.lang.reflect.Method method)
handler
- either a bean name or an actual handler instancemethod
- the target methodprotected abstract java.util.Set<java.lang.String> getMappingPathPatterns(T mapping)
protected void handlerMethodsInitialized(java.util.Map<T,HandlerMethod> handlerMethods)
handlerMethods
- a read-only map with handler methods and mappings.protected HandlerMethod getHandlerInternal(HttpServletRequest request) throws java.lang.Exception
getHandlerInternal
in class AbstractHandlerMapping
request
- current HTTP requestnull
if none foundjava.lang.Exception
- if there is an internal errorprotected HandlerMethod lookupHandlerMethod(java.lang.String lookupPath, HttpServletRequest request) throws java.lang.Exception
lookupPath
- mapping lookup path within the current servlet mappingrequest
- the current requestnull
if no matchjava.lang.Exception
handleMatch(Object, String, HttpServletRequest)
,
handleNoMatch(Set, String, HttpServletRequest)
protected abstract T getMatchingMapping(T mapping, HttpServletRequest request)
mapping
- the mapping to get a match forrequest
- the current HTTP servlet requestnull
if the mapping doesn't matchprotected abstract java.util.Comparator<T> getMappingComparator(HttpServletRequest request)
request
- the current requestnull
protected void handleMatch(T mapping, java.lang.String lookupPath, HttpServletRequest request)
mapping
- the matching mappinglookupPath
- mapping lookup path within the current servlet mappingrequest
- the current requestprotected HandlerMethod handleNoMatch(java.util.Set<T> mappings, java.lang.String lookupPath, HttpServletRequest request) throws java.lang.Exception
mappings
- all registered mappingslookupPath
- mapping lookup path within the current servlet mappingrequest
- the current requestServletException
- in case of errorsjava.lang.Exception