Class RequestMappingHandlerAdapter
- java.lang.Object
- org.springframework.context.support.ApplicationObjectSupport
- org.springframework.web.context.support.WebApplicationObjectSupport
- org.springframework.web.servlet.support.WebContentGenerator
- org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter
- org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
- All Implemented Interfaces:
Aware
,BeanFactoryAware
,InitializingBean
,ApplicationContextAware
,Ordered
,ServletContextAware
,HandlerAdapter
public class RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapter implements BeanFactoryAware, InitializingBean
AnAbstractHandlerMethodAdapter
that supportsHandlerMethod
s with their method argument and return type signature, as defined via@RequestMapping
.Support for custom argument and return value types can be added via
setCustomArgumentResolvers(java.util.List<org.springframework.web.method.support.HandlerMethodArgumentResolver>)
andsetCustomReturnValueHandlers(java.util.List<org.springframework.web.method.support.HandlerMethodReturnValueHandler>)
. Or alternatively, to re-configure all argument and return value types, usesetArgumentResolvers(java.util.List<org.springframework.web.method.support.HandlerMethodArgumentResolver>)
andsetReturnValueHandlers(java.util.List<org.springframework.web.method.support.HandlerMethodReturnValueHandler>)
.- Since:
- 3.1
- Author:
- Rossen Stoyanchev, Juergen Hoeller, Sam Brannen
- See Also:
HandlerMethodArgumentResolver
,HandlerMethodReturnValueHandler
Field Summary
Fields Modifier and Type Field Description static ReflectionUtils.MethodFilter
INIT_BINDER_METHODS
MethodFilter that matches@InitBinder
methods.static ReflectionUtils.MethodFilter
MODEL_ATTRIBUTE_METHODS
MethodFilter that matches@ModelAttribute
methods.Fields inherited from class org.springframework.web.servlet.support.WebContentGenerator
HEADER_CACHE_CONTROL, METHOD_GET, METHOD_HEAD, METHOD_POST
Fields inherited from class org.springframework.context.support.ApplicationObjectSupport
logger
Fields inherited from interface org.springframework.core.Ordered
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
Constructor Summary
Constructors Constructor Description RequestMappingHandlerAdapter()
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
afterPropertiesSet()
Invoked by the containingBeanFactory
after it has set all bean properties and satisfiedBeanFactoryAware
,ApplicationContextAware
etc.protected InitBinderDataBinderFactory
createDataBinderFactory(List<InvocableHandlerMethod> binderMethods)
Template method to create a new InitBinderDataBinderFactory instance.protected ServletInvocableHandlerMethod
createInvocableHandlerMethod(HandlerMethod handlerMethod)
Create aServletInvocableHandlerMethod
from the givenHandlerMethod
definition.List<HandlerMethodArgumentResolver>
getArgumentResolvers()
Return the configured argument resolvers, or possiblynull
if not initialized yet viaafterPropertiesSet()
.protected ConfigurableBeanFactory
getBeanFactory()
Return the owning factory of this bean instance, ornull
if none.List<HandlerMethodArgumentResolver>
getCustomArgumentResolvers()
Return the custom argument resolvers, ornull
.List<HandlerMethodReturnValueHandler>
getCustomReturnValueHandlers()
Return the custom return value handlers, ornull
.List<HandlerMethodArgumentResolver>
getInitBinderArgumentResolvers()
Return the argument resolvers for@InitBinder
methods, or possiblynull
if not initialized yet viaafterPropertiesSet()
.protected long
getLastModifiedInternal(HttpServletRequest request, HandlerMethod handlerMethod)
This implementation always returns -1.List<HttpMessageConverter<?>>
getMessageConverters()
Return the configured message body converters.List<ModelAndViewResolver>
getModelAndViewResolvers()
Return the configuredModelAndViewResolver
s, ornull
.List<HandlerMethodReturnValueHandler>
getReturnValueHandlers()
Return the configured handlers, or possiblynull
if not initialized yet viaafterPropertiesSet()
.WebBindingInitializer
getWebBindingInitializer()
Return the configured WebBindingInitializer, ornull
if none.protected ModelAndView
handleInternal(HttpServletRequest request, HttpServletResponse response, HandlerMethod handlerMethod)
Use the given handler method to handle the request.protected ModelAndView
invokeHandlerMethod(HttpServletRequest request, HttpServletResponse response, HandlerMethod handlerMethod)
Invoke theRequestMapping
handler method preparing aModelAndView
if view resolution is required.void
setArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers)
Configure the complete list of supported argument types thus overriding the resolvers that would otherwise be configured by default.void
setAsyncRequestTimeout(long timeout)
Specify the amount of time, in milliseconds, before concurrent handling should time out.void
setBeanFactory(BeanFactory beanFactory)
AConfigurableBeanFactory
is expected for resolving expressions in method argument default values.void
setCacheSecondsForSessionAttributeHandlers(int cacheSecondsForSessionAttributeHandlers)
Cache content produced by@SessionAttributes
annotated handlers for the given number of seconds.void
setCallableInterceptors(List<CallableProcessingInterceptor> interceptors)
ConfigureCallableProcessingInterceptor
's to register on async requests.void
setContentNegotiationManager(ContentNegotiationManager contentNegotiationManager)
Set theContentNegotiationManager
to use to determine requested media types.void
setCustomArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers)
Provide resolvers for custom argument types.void
setCustomReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers)
Provide handlers for custom return value types.void
setDeferredResultInterceptors(List<DeferredResultProcessingInterceptor> interceptors)
ConfigureDeferredResultProcessingInterceptor
's to register on async requests.void
setIgnoreDefaultModelOnRedirect(boolean ignoreDefaultModelOnRedirect)
By default the content of the "default" model is used both during rendering and redirect scenarios.void
setInitBinderArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers)
Configure the supported argument types in@InitBinder
methods.void
setMessageConverters(List<HttpMessageConverter<?>> messageConverters)
Provide the converters to use in argument resolvers and return value handlers that support reading and/or writing to the body of the request and response.void
setModelAndViewResolvers(List<ModelAndViewResolver> modelAndViewResolvers)
Provide customModelAndViewResolver
s.void
setParameterNameDiscoverer(ParameterNameDiscoverer parameterNameDiscoverer)
Set the ParameterNameDiscoverer to use for resolving method parameter names if needed (e.g.void
setRequestBodyAdvice(List<RequestBodyAdvice> requestBodyAdvice)
Add one or moreRequestBodyAdvice
instances to intercept the request before it is read and converted for@RequestBody
andHttpEntity
method arguments.void
setResponseBodyAdvice(List<ResponseBodyAdvice<?>> responseBodyAdvice)
Add one or moreResponseBodyAdvice
instances to intercept the response before@ResponseBody
orResponseEntity
return values are written to the response body.void
setReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers)
Configure the complete list of supported return value types thus overriding handlers that would otherwise be configured by default.void
setSessionAttributeStore(SessionAttributeStore sessionAttributeStore)
Specify the strategy to store session attributes with.void
setSynchronizeOnSession(boolean synchronizeOnSession)
Set if controller execution should be synchronized on the session, to serialize parallel invocations from the same client.void
setTaskExecutor(AsyncTaskExecutor taskExecutor)
Set the defaultAsyncTaskExecutor
to use when a controller method return aCallable
.void
setWebBindingInitializer(WebBindingInitializer webBindingInitializer)
Provide a WebBindingInitializer with "global" initialization to apply to every DataBinder instance.protected boolean
supportsInternal(HandlerMethod handlerMethod)
Always returntrue
since any method argument and return value type will be processed in some way.Methods inherited from class org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter
getLastModified, getOrder, handle, setOrder, supports
Methods inherited from class org.springframework.web.servlet.support.WebContentGenerator
applyCacheControl, applyCacheSeconds, applyCacheSeconds, cacheForSeconds, cacheForSeconds, checkAndPrepare, checkAndPrepare, checkRequest, getAllowHeader, getCacheControl, getCacheSeconds, getSupportedMethods, getVaryByRequestHeaders, isAlwaysMustRevalidate, isRequireSession, isUseCacheControlHeader, isUseCacheControlNoStore, isUseExpiresHeader, prepareResponse, preventCaching, setAlwaysMustRevalidate, setCacheControl, setCacheSeconds, setRequireSession, setSupportedMethods, setUseCacheControlHeader, setUseCacheControlNoStore, setUseExpiresHeader, setVaryByRequestHeaders
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, initApplicationContext, requiredContextClass, setApplicationContext
Field Detail
INIT_BINDER_METHODS
public static final ReflectionUtils.MethodFilter INIT_BINDER_METHODS
MethodFilter that matches@InitBinder
methods.
MODEL_ATTRIBUTE_METHODS
public static final ReflectionUtils.MethodFilter MODEL_ATTRIBUTE_METHODS
MethodFilter that matches@ModelAttribute
methods.
Constructor Detail
RequestMappingHandlerAdapter
public RequestMappingHandlerAdapter()
Method Detail
setCustomArgumentResolvers
public void setCustomArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers)
Provide resolvers for custom argument types. Custom resolvers are ordered after built-in ones. To override the built-in support for argument resolution usesetArgumentResolvers(java.util.List<org.springframework.web.method.support.HandlerMethodArgumentResolver>)
instead.
getCustomArgumentResolvers
public List<HandlerMethodArgumentResolver> getCustomArgumentResolvers()
Return the custom argument resolvers, ornull
.
setArgumentResolvers
public void setArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers)
Configure the complete list of supported argument types thus overriding the resolvers that would otherwise be configured by default.
getArgumentResolvers
public List<HandlerMethodArgumentResolver> getArgumentResolvers()
Return the configured argument resolvers, or possiblynull
if not initialized yet viaafterPropertiesSet()
.
setInitBinderArgumentResolvers
public void setInitBinderArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers)
Configure the supported argument types in@InitBinder
methods.
getInitBinderArgumentResolvers
public List<HandlerMethodArgumentResolver> getInitBinderArgumentResolvers()
Return the argument resolvers for@InitBinder
methods, or possiblynull
if not initialized yet viaafterPropertiesSet()
.
setCustomReturnValueHandlers
public void setCustomReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers)
Provide handlers for custom return value types. Custom handlers are ordered after built-in ones. To override the built-in support for return value handling usesetReturnValueHandlers(java.util.List<org.springframework.web.method.support.HandlerMethodReturnValueHandler>)
.
getCustomReturnValueHandlers
public List<HandlerMethodReturnValueHandler> getCustomReturnValueHandlers()
Return the custom return value handlers, ornull
.
setReturnValueHandlers
public void setReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers)
Configure the complete list of supported return value types thus overriding handlers that would otherwise be configured by default.
getReturnValueHandlers
public List<HandlerMethodReturnValueHandler> getReturnValueHandlers()
Return the configured handlers, or possiblynull
if not initialized yet viaafterPropertiesSet()
.
setModelAndViewResolvers
public void setModelAndViewResolvers(List<ModelAndViewResolver> modelAndViewResolvers)
Provide customModelAndViewResolver
s.Note: This method is available for backwards compatibility only. However, it is recommended to re-write a
ModelAndViewResolver
asHandlerMethodReturnValueHandler
. An adapter between the two interfaces is not possible since theHandlerMethodReturnValueHandler.supportsReturnType(org.springframework.core.MethodParameter)
method cannot be implemented. HenceModelAndViewResolver
s are limited to always being invoked at the end after all other return value handlers have been given a chance.A
HandlerMethodReturnValueHandler
provides better access to the return type and controller method information and can be ordered freely relative to other return value handlers.
getModelAndViewResolvers
public List<ModelAndViewResolver> getModelAndViewResolvers()
Return the configuredModelAndViewResolver
s, ornull
.
setContentNegotiationManager
public void setContentNegotiationManager(ContentNegotiationManager contentNegotiationManager)
Set theContentNegotiationManager
to use to determine requested media types. If not set, the default constructor is used.
setMessageConverters
public void setMessageConverters(List<HttpMessageConverter<?>> messageConverters)
Provide the converters to use in argument resolvers and return value handlers that support reading and/or writing to the body of the request and response.
getMessageConverters
public List<HttpMessageConverter<?>> getMessageConverters()
Return the configured message body converters.
setRequestBodyAdvice
public void setRequestBodyAdvice(List<RequestBodyAdvice> requestBodyAdvice)
Add one or moreRequestBodyAdvice
instances to intercept the request before it is read and converted for@RequestBody
andHttpEntity
method arguments.
setResponseBodyAdvice
public void setResponseBodyAdvice(List<ResponseBodyAdvice<?>> responseBodyAdvice)
Add one or moreResponseBodyAdvice
instances to intercept the response before@ResponseBody
orResponseEntity
return values are written to the response body.
setWebBindingInitializer
public void setWebBindingInitializer(WebBindingInitializer webBindingInitializer)
Provide a WebBindingInitializer with "global" initialization to apply to every DataBinder instance.
getWebBindingInitializer
public WebBindingInitializer getWebBindingInitializer()
Return the configured WebBindingInitializer, ornull
if none.
setTaskExecutor
public void setTaskExecutor(AsyncTaskExecutor taskExecutor)
Set the defaultAsyncTaskExecutor
to use when a controller method return aCallable
. Controller methods can override this default on a per-request basis by returning anWebAsyncTask
.By default a
SimpleAsyncTaskExecutor
instance is used. It's recommended to change that default in production as the simple executor does not re-use threads.
setAsyncRequestTimeout
public void setAsyncRequestTimeout(long timeout)
Specify the amount of time, in milliseconds, before concurrent handling should time out. In Servlet 3, the timeout begins after the main request processing thread has exited and ends when the request is dispatched again for further processing of the concurrently produced result.If this value is not set, the default timeout of the underlying implementation is used, e.g. 10 seconds on Tomcat with Servlet 3.
- Parameters:
timeout
- the timeout value in milliseconds
setCallableInterceptors
public void setCallableInterceptors(List<CallableProcessingInterceptor> interceptors)
ConfigureCallableProcessingInterceptor
's to register on async requests.- Parameters:
interceptors
- the interceptors to register
setDeferredResultInterceptors
public void setDeferredResultInterceptors(List<DeferredResultProcessingInterceptor> interceptors)
ConfigureDeferredResultProcessingInterceptor
's to register on async requests.- Parameters:
interceptors
- the interceptors to register
setIgnoreDefaultModelOnRedirect
public void setIgnoreDefaultModelOnRedirect(boolean ignoreDefaultModelOnRedirect)
By default the content of the "default" model is used both during rendering and redirect scenarios. Alternatively a controller method can declare aRedirectAttributes
argument and use it to provide attributes for a redirect.Setting this flag to
true
guarantees the "default" model is never used in a redirect scenario even if a RedirectAttributes argument is not declared. Setting it tofalse
means the "default" model may be used in a redirect if the controller method doesn't declare a RedirectAttributes argument.The default setting is
false
but new applications should consider setting it totrue
.- See Also:
RedirectAttributes
setSessionAttributeStore
public void setSessionAttributeStore(SessionAttributeStore sessionAttributeStore)
Specify the strategy to store session attributes with. The default isDefaultSessionAttributeStore
, storing session attributes in the HttpSession with the same attribute name as in the model.
setCacheSecondsForSessionAttributeHandlers
public void setCacheSecondsForSessionAttributeHandlers(int cacheSecondsForSessionAttributeHandlers)
Cache content produced by@SessionAttributes
annotated handlers for the given number of seconds.Possible values are:
- -1: no generation of cache-related headers
- 0 (default value): "Cache-Control: no-store" will prevent caching
- 1 or higher: "Cache-Control: max-age=seconds" will ask to cache content; not advised when dealing with session attributes
In contrast to the "cacheSeconds" property which will apply to all general handlers (but not to
@SessionAttributes
annotated handlers), this setting will apply to@SessionAttributes
handlers only.
setSynchronizeOnSession
public void setSynchronizeOnSession(boolean synchronizeOnSession)
Set if controller execution should be synchronized on the session, to serialize parallel invocations from the same client.More specifically, the execution of the
handleRequestInternal
method will get synchronized if this flag is "true". The best available session mutex will be used for the synchronization; ideally, this will be a mutex exposed by HttpSessionMutexListener.The session mutex is guaranteed to be the same object during the entire lifetime of the session, available under the key defined by the
SESSION_MUTEX_ATTRIBUTE
constant. It serves as a safe reference to synchronize on for locking on the current session.In many cases, the HttpSession reference itself is a safe mutex as well, since it will always be the same object reference for the same active logical session. However, this is not guaranteed across different servlet containers; the only 100% safe way is a session mutex.
setParameterNameDiscoverer
public void setParameterNameDiscoverer(ParameterNameDiscoverer parameterNameDiscoverer)
Set the ParameterNameDiscoverer to use for resolving method parameter names if needed (e.g. for default attribute names).Default is a
DefaultParameterNameDiscoverer
.
setBeanFactory
public void setBeanFactory(BeanFactory beanFactory)
AConfigurableBeanFactory
is expected for resolving expressions in method argument default values.- Specified by:
setBeanFactory
in interfaceBeanFactoryAware
- Parameters:
beanFactory
- owning BeanFactory (nevernull
). The bean can immediately call methods on the factory.- See Also:
BeanInitializationException
getBeanFactory
protected ConfigurableBeanFactory getBeanFactory()
Return the owning factory of this bean instance, ornull
if none.
afterPropertiesSet
public void afterPropertiesSet()
Description copied from interface:InitializingBean
Invoked by the containingBeanFactory
after it has set all bean properties and satisfiedBeanFactoryAware
,ApplicationContextAware
etc.This method allows the bean instance to perform validation of its overall configuration and final initialization when all bean properties have been set.
- Specified by:
afterPropertiesSet
in interfaceInitializingBean
supportsInternal
protected boolean supportsInternal(HandlerMethod handlerMethod)
Always returntrue
since any method argument and return value type will be processed in some way. A method argument not recognized by any HandlerMethodArgumentResolver is interpreted as a request parameter if it is a simple type, or as a model attribute otherwise. A return value not recognized by any HandlerMethodReturnValueHandler will be interpreted as a model attribute.- Specified by:
supportsInternal
in classAbstractHandlerMethodAdapter
- Parameters:
handlerMethod
- the handler method to check- Returns:
- whether or not this adapter can adapt the given method
handleInternal
protected ModelAndView handleInternal(HttpServletRequest request, HttpServletResponse response, HandlerMethod handlerMethod) throws Exception
Description copied from class:AbstractHandlerMethodAdapter
Use the given handler method to handle the request.- Specified by:
handleInternal
in classAbstractHandlerMethodAdapter
- Parameters:
request
- current HTTP requestresponse
- current HTTP responsehandlerMethod
- handler method to use. This object must have previously been passed to theAbstractHandlerMethodAdapter.supportsInternal(HandlerMethod)
this interface, which must have returnedtrue
.- Returns:
- ModelAndView object with the name of the view and the required model data, or
null
if the request has been handled directly - Throws:
Exception
- in case of errors
getLastModifiedInternal
protected long getLastModifiedInternal(HttpServletRequest request, HandlerMethod handlerMethod)
This implementation always returns -1. An@RequestMapping
method can calculate the lastModified value, callWebRequest.checkNotModified(long)
, and returnnull
if the result of that call istrue
.- Specified by:
getLastModifiedInternal
in classAbstractHandlerMethodAdapter
- Parameters:
request
- current HTTP requesthandlerMethod
- handler method to use- Returns:
- the lastModified value for the given handler
invokeHandlerMethod
protected ModelAndView invokeHandlerMethod(HttpServletRequest request, HttpServletResponse response, HandlerMethod handlerMethod) throws Exception
Invoke theRequestMapping
handler method preparing aModelAndView
if view resolution is required.- Throws:
Exception
- Since:
- 4.2
- See Also:
createInvocableHandlerMethod(HandlerMethod)
createInvocableHandlerMethod
protected ServletInvocableHandlerMethod createInvocableHandlerMethod(HandlerMethod handlerMethod)
Create aServletInvocableHandlerMethod
from the givenHandlerMethod
definition.- Parameters:
handlerMethod
- theHandlerMethod
definition- Returns:
- the corresponding
ServletInvocableHandlerMethod
(or custom subclass thereof) - Since:
- 4.2
createDataBinderFactory
protected InitBinderDataBinderFactory createDataBinderFactory(List<InvocableHandlerMethod> binderMethods) throws Exception
Template method to create a new InitBinderDataBinderFactory instance.The default implementation creates a ServletRequestDataBinderFactory. This can be overridden for custom ServletRequestDataBinder subclasses.
- Parameters:
binderMethods
-@InitBinder
methods- Returns:
- the InitBinderDataBinderFactory instance to use
- Throws:
Exception
- in case of invalid state or arguments