public class CustomRequestMappingHandlerAdapter
extends org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
AbstractHandlerMethodAdapter that supports RequestMapping annotated
HandlerMethods.
Support for custom argument and return value types can be added via
setCustomArgumentResolvers(java.util.List<org.springframework.web.method.support.HandlerMethodArgumentResolver>) and setCustomReturnValueHandlers(java.util.List<org.springframework.web.method.support.HandlerMethodReturnValueHandler>), or alternatively,
to re-configure all argument and return value types, use setArgumentResolvers(java.util.List<org.springframework.web.method.support.HandlerMethodArgumentResolver>) and setReturnValueHandlers(java.util.List<org.springframework.web.method.support.HandlerMethodReturnValueHandler>).
HandlerMethodArgumentResolver,
HandlerMethodReturnValueHandler| Modifier and Type | Field and Description |
|---|---|
static org.springframework.util.ReflectionUtils.MethodFilter |
INIT_BINDER_METHODS
MethodFilter that matches
@InitBinder methods. |
static org.springframework.util.ReflectionUtils.MethodFilter |
MODEL_ATTRIBUTE_METHODS
MethodFilter that matches
@ModelAttribute methods. |
| Constructor and Description |
|---|
CustomRequestMappingHandlerAdapter(java.lang.Boolean okEnable) |
| Modifier and Type | Method and Description |
|---|---|
void |
afterPropertiesSet() |
protected org.springframework.web.method.annotation.InitBinderDataBinderFactory |
createDataBinderFactory(java.util.List<org.springframework.web.method.support.InvocableHandlerMethod> binderMethods)
Template method to create a new InitBinderDataBinderFactory instance.
|
protected org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod |
createInvocableHandlerMethod(org.springframework.web.method.HandlerMethod handlerMethod)
Create a
ServletInvocableHandlerMethod from the given HandlerMethod
definition. |
java.util.List<org.springframework.web.method.support.HandlerMethodArgumentResolver> |
getArgumentResolvers()
Return the configured argument resolvers, or possibly
null if not initialized yet via
afterPropertiesSet(). |
protected org.springframework.beans.factory.config.ConfigurableBeanFactory |
getBeanFactory()
Return the owning factory of this bean instance, or
null if none. |
java.util.List<org.springframework.web.method.support.HandlerMethodArgumentResolver> |
getCustomArgumentResolvers()
Return the custom argument resolvers, or
null. |
java.util.List<org.springframework.web.method.support.HandlerMethodReturnValueHandler> |
getCustomReturnValueHandlers()
Return the custom return value handlers, or
null. |
java.util.List<org.springframework.web.method.support.HandlerMethodArgumentResolver> |
getInitBinderArgumentResolvers()
Return the argument resolvers for
@InitBinder methods, or possibly null if not
initialized yet via afterPropertiesSet(). |
protected long |
getLastModifiedInternal(javax.servlet.http.HttpServletRequest request,
org.springframework.web.method.HandlerMethod handlerMethod)
This implementation always returns -1.
|
java.util.List<org.springframework.http.converter.HttpMessageConverter<?>> |
getMessageConverters()
Return the configured message body converters.
|
java.util.List<org.springframework.web.servlet.mvc.annotation.ModelAndViewResolver> |
getModelAndViewResolvers()
Return the configured
ModelAndViewResolvers, or null. |
org.springframework.core.ReactiveAdapterRegistry |
getReactiveAdapterRegistry()
Return the configured reactive type registry of adapters.
|
java.util.List<org.springframework.web.method.support.HandlerMethodReturnValueHandler> |
getReturnValueHandlers()
Return the configured handlers, or possibly
null if not initialized yet via afterPropertiesSet(). |
org.springframework.web.bind.support.WebBindingInitializer |
getWebBindingInitializer()
Return the configured WebBindingInitializer, or
null if none. |
protected org.springframework.web.servlet.ModelAndView |
handleInternal(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response,
org.springframework.web.method.HandlerMethod handlerMethod) |
protected org.springframework.web.servlet.ModelAndView |
invokeHandlerMethod(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response,
org.springframework.web.method.HandlerMethod handlerMethod)
Invoke the
RequestMapping handler method preparing a ModelAndView if view
resolution is required. |
void |
setArgumentResolvers(java.util.List<org.springframework.web.method.support.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(org.springframework.beans.factory.BeanFactory beanFactory)
A
ConfigurableBeanFactory 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(java.util.List<org.springframework.web.context.request.async.CallableProcessingInterceptor> interceptors)
Configure
CallableProcessingInterceptor's to register on async requests. |
void |
setContentNegotiationManager(org.springframework.web.accept.ContentNegotiationManager contentNegotiationManager)
Set the
ContentNegotiationManager to use to determine requested media types. |
void |
setCustomArgumentResolvers(java.util.List<org.springframework.web.method.support.HandlerMethodArgumentResolver> argumentResolvers)
Provide resolvers for custom argument types.
|
void |
setCustomReturnValueHandlers(java.util.List<org.springframework.web.method.support.HandlerMethodReturnValueHandler> returnValueHandlers)
Provide handlers for custom return value types.
|
void |
setDeferredResultInterceptors(java.util.List<org.springframework.web.context.request.async.DeferredResultProcessingInterceptor> interceptors)
Configure
DeferredResultProcessingInterceptor'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(java.util.List<org.springframework.web.method.support.HandlerMethodArgumentResolver> argumentResolvers)
Configure the supported argument types in
@InitBinder methods. |
void |
setMessageConverters(java.util.List<org.springframework.http.converter.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(java.util.List<org.springframework.web.servlet.mvc.annotation.ModelAndViewResolver> modelAndViewResolvers)
Provide custom
ModelAndViewResolvers. |
void |
setParameterNameDiscoverer(org.springframework.core.ParameterNameDiscoverer parameterNameDiscoverer)
Set the ParameterNameDiscoverer to use for resolving method parameter names if needed (e.g.
|
void |
setReactiveAdapterRegistry(org.springframework.core.ReactiveAdapterRegistry reactiveAdapterRegistry)
Configure the registry for reactive library types to be supported as return values from
controller methods.
|
void |
setRequestBodyAdvice(java.util.List<org.springframework.web.servlet.mvc.method.annotation.RequestBodyAdvice> requestBodyAdvice)
Add one or more
RequestBodyAdvice instances to intercept the request before it is read
and converted for @RequestBody and HttpEntity method arguments. |
void |
setResponseBodyAdvice(java.util.List<org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice<?>> responseBodyAdvice) |
void |
setReturnValueHandlers(java.util.List<org.springframework.web.method.support.HandlerMethodReturnValueHandler> returnValueHandlers)
Configure the complete list of supported return value types thus overriding handlers that would
otherwise be configured by default.
|
void |
setSessionAttributeStore(org.springframework.web.bind.support.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(org.springframework.core.task.AsyncTaskExecutor taskExecutor)
Set the default
AsyncTaskExecutor to use when a controller method return a Callable. |
void |
setWebBindingInitializer(org.springframework.web.bind.support.WebBindingInitializer webBindingInitializer)
Provide a WebBindingInitializer with "global" initialization to apply to every DataBinder
instance.
|
protected boolean |
supportsInternal(org.springframework.web.method.HandlerMethod handlerMethod)
Always return
true since any method argument and return value type will be processed in
some way. |
getLastModified, getOrder, handle, setOrder, supportsapplyCacheControl, 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, setVaryByRequestHeadersgetServletContext, getTempDir, getWebApplicationContext, initApplicationContext, initServletContext, isContextRequired, setServletContextpublic static final org.springframework.util.ReflectionUtils.MethodFilter INIT_BINDER_METHODS
@InitBinder methods.public static final org.springframework.util.ReflectionUtils.MethodFilter MODEL_ATTRIBUTE_METHODS
@ModelAttribute methods.public CustomRequestMappingHandlerAdapter(java.lang.Boolean okEnable)
public void setCustomArgumentResolvers(@Nullable
java.util.List<org.springframework.web.method.support.HandlerMethodArgumentResolver> argumentResolvers)
setArgumentResolvers(java.util.List<org.springframework.web.method.support.HandlerMethodArgumentResolver>)
instead.setCustomArgumentResolvers in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter@Nullable public java.util.List<org.springframework.web.method.support.HandlerMethodArgumentResolver> getCustomArgumentResolvers()
null.getCustomArgumentResolvers in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterpublic void setArgumentResolvers(@Nullable
java.util.List<org.springframework.web.method.support.HandlerMethodArgumentResolver> argumentResolvers)
setArgumentResolvers in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter@Nullable public java.util.List<org.springframework.web.method.support.HandlerMethodArgumentResolver> getArgumentResolvers()
null if not initialized yet via
afterPropertiesSet().getArgumentResolvers in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterpublic void setInitBinderArgumentResolvers(@Nullable
java.util.List<org.springframework.web.method.support.HandlerMethodArgumentResolver> argumentResolvers)
@InitBinder methods.setInitBinderArgumentResolvers in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter@Nullable public java.util.List<org.springframework.web.method.support.HandlerMethodArgumentResolver> getInitBinderArgumentResolvers()
@InitBinder methods, or possibly null if not
initialized yet via afterPropertiesSet().getInitBinderArgumentResolvers in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterpublic void setCustomReturnValueHandlers(@Nullable
java.util.List<org.springframework.web.method.support.HandlerMethodReturnValueHandler> returnValueHandlers)
setReturnValueHandlers(java.util.List<org.springframework.web.method.support.HandlerMethodReturnValueHandler>).setCustomReturnValueHandlers in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter@Nullable public java.util.List<org.springframework.web.method.support.HandlerMethodReturnValueHandler> getCustomReturnValueHandlers()
null.getCustomReturnValueHandlers in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterpublic void setReturnValueHandlers(@Nullable
java.util.List<org.springframework.web.method.support.HandlerMethodReturnValueHandler> returnValueHandlers)
setReturnValueHandlers in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter@Nullable public java.util.List<org.springframework.web.method.support.HandlerMethodReturnValueHandler> getReturnValueHandlers()
null if not initialized yet via afterPropertiesSet().getReturnValueHandlers in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterpublic void setModelAndViewResolvers(@Nullable
java.util.List<org.springframework.web.servlet.mvc.annotation.ModelAndViewResolver> modelAndViewResolvers)
ModelAndViewResolvers.
Note: This method is available for backwards
compatibility only. However, it is recommended to re-write a ModelAndViewResolver as
HandlerMethodReturnValueHandler. An adapter between the two interfaces is not possible
since the HandlerMethodReturnValueHandler.supportsReturnType(org.springframework.core.MethodParameter) method cannot be
implemented. Hence ModelAndViewResolvers 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.
setModelAndViewResolvers in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter@Nullable public java.util.List<org.springframework.web.servlet.mvc.annotation.ModelAndViewResolver> getModelAndViewResolvers()
ModelAndViewResolvers, or null.getModelAndViewResolvers in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterpublic void setContentNegotiationManager(org.springframework.web.accept.ContentNegotiationManager contentNegotiationManager)
ContentNegotiationManager to use to determine requested media types. If not
set, the default constructor is used.setContentNegotiationManager in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterpublic void setMessageConverters(java.util.List<org.springframework.http.converter.HttpMessageConverter<?>> messageConverters)
setMessageConverters in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterpublic java.util.List<org.springframework.http.converter.HttpMessageConverter<?>> getMessageConverters()
getMessageConverters in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterpublic void setRequestBodyAdvice(@Nullable
java.util.List<org.springframework.web.servlet.mvc.method.annotation.RequestBodyAdvice> requestBodyAdvice)
RequestBodyAdvice instances to intercept the request before it is read
and converted for @RequestBody and HttpEntity method arguments.setRequestBodyAdvice in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterpublic void setResponseBodyAdvice(@Nullable
java.util.List<org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice<?>> responseBodyAdvice)
setResponseBodyAdvice in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterpublic void setWebBindingInitializer(@Nullable
org.springframework.web.bind.support.WebBindingInitializer webBindingInitializer)
setWebBindingInitializer in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter@Nullable public org.springframework.web.bind.support.WebBindingInitializer getWebBindingInitializer()
null if none.getWebBindingInitializer in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterpublic void setTaskExecutor(org.springframework.core.task.AsyncTaskExecutor taskExecutor)
AsyncTaskExecutor to use when a controller method return a Callable. Controller methods can override this default on a per-request basis by returning an
WebAsyncTask.
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.
setTaskExecutor in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterpublic void setAsyncRequestTimeout(long timeout)
If this value is not set, the default timeout of the underlying implementation is used, e.g. 10 seconds on Tomcat with Servlet 3.
setAsyncRequestTimeout in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdaptertimeout - the timeout value in millisecondspublic void setCallableInterceptors(java.util.List<org.springframework.web.context.request.async.CallableProcessingInterceptor> interceptors)
CallableProcessingInterceptor's to register on async requests.setCallableInterceptors in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterinterceptors - the interceptors to registerpublic void setDeferredResultInterceptors(java.util.List<org.springframework.web.context.request.async.DeferredResultProcessingInterceptor> interceptors)
DeferredResultProcessingInterceptor's to register on async requests.setDeferredResultInterceptors in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterinterceptors - the interceptors to registerpublic void setReactiveAdapterRegistry(org.springframework.core.ReactiveAdapterRegistry reactiveAdapterRegistry)
setReactiveAdapterRegistry in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterpublic org.springframework.core.ReactiveAdapterRegistry getReactiveAdapterRegistry()
getReactiveAdapterRegistry in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterpublic void setIgnoreDefaultModelOnRedirect(boolean ignoreDefaultModelOnRedirect)
RedirectAttributes 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 to false 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 to true.
setIgnoreDefaultModelOnRedirect in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterRedirectAttributespublic void setSessionAttributeStore(org.springframework.web.bind.support.SessionAttributeStore sessionAttributeStore)
DefaultSessionAttributeStore, storing session attributes
in the HttpSession with the same attribute name as in the model.setSessionAttributeStore in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterpublic void setCacheSecondsForSessionAttributeHandlers(int cacheSecondsForSessionAttributeHandlers)
@SessionAttributes annotated handlers for the given number of
seconds.
Possible values are:
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.
setCacheSecondsForSessionAttributeHandlers in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterWebContentGenerator.setCacheSeconds(int),
SessionAttributespublic void setSynchronizeOnSession(boolean synchronizeOnSession)
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.
setSynchronizeOnSession in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterHttpSessionMutexListener,
WebUtils.getSessionMutex(javax.servlet.http.HttpSession)public void setParameterNameDiscoverer(org.springframework.core.ParameterNameDiscoverer parameterNameDiscoverer)
Default is a DefaultParameterNameDiscoverer.
setParameterNameDiscoverer in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterpublic void setBeanFactory(org.springframework.beans.factory.BeanFactory beanFactory)
ConfigurableBeanFactory is expected for resolving expressions in method argument
default values.setBeanFactory in interface org.springframework.beans.factory.BeanFactoryAwaresetBeanFactory in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter@Nullable protected org.springframework.beans.factory.config.ConfigurableBeanFactory getBeanFactory()
null if none.getBeanFactory in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterpublic void afterPropertiesSet()
afterPropertiesSet in interface org.springframework.beans.factory.InitializingBeanafterPropertiesSet in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterprotected boolean supportsInternal(org.springframework.web.method.HandlerMethod handlerMethod)
true 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.supportsInternal in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterprotected org.springframework.web.servlet.ModelAndView handleInternal(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response,
org.springframework.web.method.HandlerMethod handlerMethod)
throws java.lang.Exception
handleInternal in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterjava.lang.Exceptionprotected long getLastModifiedInternal(javax.servlet.http.HttpServletRequest request,
org.springframework.web.method.HandlerMethod handlerMethod)
@RequestMapping method can calculate the
lastModified value, call WebRequest.checkNotModified(long), and return null if
the result of that call is true.getLastModifiedInternal in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter@Nullable
protected org.springframework.web.servlet.ModelAndView invokeHandlerMethod(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response,
org.springframework.web.method.HandlerMethod handlerMethod)
throws java.lang.Exception
RequestMapping handler method preparing a ModelAndView if view
resolution is required.invokeHandlerMethod in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterjava.lang.ExceptioncreateInvocableHandlerMethod(HandlerMethod)protected org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod createInvocableHandlerMethod(org.springframework.web.method.HandlerMethod handlerMethod)
ServletInvocableHandlerMethod from the given HandlerMethod
definition.createInvocableHandlerMethod in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterhandlerMethod - the HandlerMethod definitionServletInvocableHandlerMethod (or custom subclass thereof)protected org.springframework.web.method.annotation.InitBinderDataBinderFactory createDataBinderFactory(java.util.List<org.springframework.web.method.support.InvocableHandlerMethod> binderMethods)
throws java.lang.Exception
The default implementation creates a ServletRequestDataBinderFactory. This can be overridden for custom ServletRequestDataBinder subclasses.
createDataBinderFactory in class org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterbinderMethods - @InitBinder methodsjava.lang.Exception - in case of invalid state or arguments