public abstract class AbstractHandlerMapping extends WebApplicationObjectSupport implements HandlerMapping, Ordered
HandlerMapping
implementations. Supports ordering, a default handler, handler interceptors,
including handler interceptors mapped by path patterns.
Note: This base class does not support exposure of the
HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
. Support for this attribute
is up to concrete subclasses, typically based on request URL mappings.
getHandlerInternal(HttpServletRequest)
,
setDefaultHandler(java.lang.Object)
,
setAlwaysUseFullPath(boolean)
,
setUrlDecode(boolean)
,
AntPathMatcher
,
setInterceptors(java.lang.Object[])
,
HandlerInterceptor
Modifier and Type | Field and Description |
---|---|
private java.util.List<HandlerInterceptor> |
adaptedInterceptors |
private java.lang.Object |
defaultHandler |
private java.util.List<java.lang.Object> |
interceptors |
private java.util.List<MappedInterceptor> |
mappedInterceptors |
private int |
order |
private PathMatcher |
pathMatcher |
private UrlPathHelper |
urlPathHelper |
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 |
---|
AbstractHandlerMapping() |
Modifier and Type | Method and Description |
---|---|
protected HandlerInterceptor |
adaptInterceptor(java.lang.Object interceptor)
Adapt the given interceptor object to the HandlerInterceptor interface.
|
protected void |
detectMappedInterceptors(java.util.List<MappedInterceptor> mappedInterceptors)
Detects beans of type
MappedInterceptor and adds them to the list of mapped interceptors. |
protected void |
extendInterceptors(java.util.List<java.lang.Object> interceptors)
Extension hook that subclasses can override to register additional interceptors,
given the configured interceptors (see
setInterceptors(java.lang.Object[]) ). |
protected HandlerInterceptor[] |
getAdaptedInterceptors()
Return the adapted interceptors as HandlerInterceptor array.
|
java.lang.Object |
getDefaultHandler()
Return the default handler for this handler mapping,
or
null if none. |
HandlerExecutionChain |
getHandler(HttpServletRequest request)
Look up a handler for the given request, falling back to the default
handler if no specific one is found.
|
protected HandlerExecutionChain |
getHandlerExecutionChain(java.lang.Object handler,
HttpServletRequest request)
Build a HandlerExecutionChain for the given handler, including applicable interceptors.
|
protected abstract java.lang.Object |
getHandlerInternal(HttpServletRequest request)
Look up a handler for the given request, returning
null if no
specific one is found. |
protected MappedInterceptor[] |
getMappedInterceptors()
Return all configured
MappedInterceptor s as an array. |
int |
getOrder()
Return the order value of this object, with a
higher value meaning greater in terms of sorting.
|
PathMatcher |
getPathMatcher()
Return the PathMatcher implementation to use for matching URL paths
against registered URL patterns.
|
UrlPathHelper |
getUrlPathHelper()
Return the UrlPathHelper implementation to use for resolution of lookup paths.
|
protected void |
initApplicationContext()
Initializes the interceptors.
|
protected void |
initInterceptors()
Initialize the specified interceptors, checking for
MappedInterceptor s and adapting
HandlerInterceptors where necessary. |
void |
setAlwaysUseFullPath(boolean alwaysUseFullPath)
Set if URL lookup should always use the full path within the current servlet
context.
|
void |
setDefaultHandler(java.lang.Object defaultHandler)
Set the default handler for this handler mapping.
|
void |
setInterceptors(java.lang.Object[] interceptors)
Set the interceptors to apply for all handlers mapped by this handler mapping.
|
void |
setOrder(int order)
Specify the order value for this HandlerMapping bean.
|
void |
setPathMatcher(PathMatcher pathMatcher)
Set the PathMatcher implementation to use for matching URL paths
against registered URL patterns.
|
void |
setRemoveSemicolonContent(boolean removeSemicolonContent)
Set if ";" (semicolon) content should be stripped from the request URI.
|
void |
setUrlDecode(boolean urlDecode)
Set if context path and request URI should be URL-decoded.
|
void |
setUrlPathHelper(UrlPathHelper urlPathHelper)
Set the UrlPathHelper to use for resolution of lookup paths.
|
getServletContext, getTempDir, getWebApplicationContext, initApplicationContext, initServletContext, isContextRequired, setServletContext
getApplicationContext, getMessageSourceAccessor, requiredContextClass, setApplicationContext
private int order
private java.lang.Object defaultHandler
private UrlPathHelper urlPathHelper
private PathMatcher pathMatcher
private final java.util.List<java.lang.Object> interceptors
private final java.util.List<HandlerInterceptor> adaptedInterceptors
private final java.util.List<MappedInterceptor> mappedInterceptors
public final void setOrder(int order)
Default value is Integer.MAX_VALUE
, meaning that it's non-ordered.
Ordered.getOrder()
public final int getOrder()
Ordered
Normally starting with 0, with Integer.MAX_VALUE
indicating the greatest value. Same order values will result
in arbitrary positions for the affected objects.
Higher values can be interpreted as lower priority. As a consequence, the object with the lowest value has highest priority (somewhat analogous to Servlet "load-on-startup" values).
public void setDefaultHandler(java.lang.Object defaultHandler)
Default is null
, indicating no default handler.
public java.lang.Object getDefaultHandler()
null
if none.public void setAlwaysUseFullPath(boolean alwaysUseFullPath)
Default is "false".
public void setUrlDecode(boolean urlDecode)
Uses either the request encoding or the default encoding according to the Servlet spec (ISO-8859-1).
UrlPathHelper.setUrlDecode(boolean)
public void setRemoveSemicolonContent(boolean removeSemicolonContent)
The default value is true
.
public void setUrlPathHelper(UrlPathHelper urlPathHelper)
Use this to override the default UrlPathHelper with a custom subclass, or to share common UrlPathHelper settings across multiple HandlerMappings and MethodNameResolvers.
public UrlPathHelper getUrlPathHelper()
public void setPathMatcher(PathMatcher pathMatcher)
AntPathMatcher
public PathMatcher getPathMatcher()
public void setInterceptors(java.lang.Object[] interceptors)
Supported interceptor types are HandlerInterceptor, WebRequestInterceptor, and MappedInterceptor. Mapped interceptors apply only to request URLs that match its path patterns. Mapped interceptor beans are also detected by type during initialization.
interceptors
- array of handler interceptors, or null
if noneadaptInterceptor(java.lang.Object)
,
HandlerInterceptor
,
WebRequestInterceptor
protected void initApplicationContext() throws BeansException
initApplicationContext
in class ApplicationObjectSupport
ApplicationContextException
- in case of initialization errorsBeansException
- if thrown by ApplicationContext methodsextendInterceptors(java.util.List)
,
initInterceptors()
protected void extendInterceptors(java.util.List<java.lang.Object> interceptors)
setInterceptors(java.lang.Object[])
).
Will be invoked before initInterceptors()
adapts the specified
interceptors into HandlerInterceptor
instances.
The default implementation is empty.
interceptors
- the configured interceptor List (never null
),
allowing to add further interceptors before as well as after the existing
interceptorsprotected void detectMappedInterceptors(java.util.List<MappedInterceptor> mappedInterceptors)
MappedInterceptor
and adds them to the list of mapped interceptors.
This is done in addition to any MappedInterceptor
s that may have been provided via
setInterceptors(Object[])
. Subclasses can override this method to change that.mappedInterceptors
- an empty list to add MappedInterceptor types toprotected void initInterceptors()
MappedInterceptor
s and adapting
HandlerInterceptors where necessary.protected HandlerInterceptor adaptInterceptor(java.lang.Object interceptor)
Supported interceptor types are HandlerInterceptor and WebRequestInterceptor. Each given WebRequestInterceptor will be wrapped in a WebRequestHandlerInterceptorAdapter. Can be overridden in subclasses.
interceptor
- the specified interceptor objectHandlerInterceptor
,
WebRequestInterceptor
,
WebRequestHandlerInterceptorAdapter
protected final HandlerInterceptor[] getAdaptedInterceptors()
null
if noneprotected final MappedInterceptor[] getMappedInterceptors()
MappedInterceptor
s as an array.MappedInterceptor
s, or null
if nonepublic final HandlerExecutionChain getHandler(HttpServletRequest request) throws java.lang.Exception
getHandler
in interface HandlerMapping
request
- current HTTP requestjava.lang.Exception
- if there is an internal errorgetHandlerInternal(HttpServletRequest)
protected abstract java.lang.Object getHandlerInternal(HttpServletRequest request) throws java.lang.Exception
null
if no
specific one is found. This method is called by getHandler(HttpServletRequest)
;
a null
return value will lead to the default handler, if one is set.
Note: This method may also return a pre-built HandlerExecutionChain
,
combining a handler object with dynamically determined interceptors.
Statically specified interceptors will get merged into such an existing chain.
request
- current HTTP requestnull
if none foundjava.lang.Exception
- if there is an internal errorprotected HandlerExecutionChain getHandlerExecutionChain(java.lang.Object handler, HttpServletRequest request)
The default implementation simply builds a standard HandlerExecutionChain with
the given handler, the handler mapping's common interceptors, and any MappedInterceptor
s
matching to the current request URL. Subclasses may
override this in order to extend/rearrange the list of interceptors.
NOTE: The passed-in handler object may be a raw handler or a pre-built HandlerExecutionChain. This method should handle those two cases explicitly, either building a new HandlerExecutionChain or extending the existing chain.
For simply adding an interceptor, consider calling super.getHandlerExecutionChain
and invoking HandlerExecutionChain.addInterceptor(org.springframework.web.servlet.HandlerInterceptor)
on the returned chain object.
handler
- the resolved handler instance (never null
)request
- current HTTP requestnull
)getAdaptedInterceptors()