public class

AnnotationMethodHandlerAdapter

extends WebContentGenerator
implements BeanFactoryAware Ordered HandlerAdapter
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.annotation.AnnotationMethodHandlerAdapter

Class Overview

Implementation of the HandlerAdapter interface that maps handler methods based on HTTP paths, HTTP methods and request parameters expressed through the RequestMapping annotation.

Supports request parameter binding through the RequestParam annotation. Also supports the ModelAttribute annotation for exposing model attribute values to the view, as well as InitBinder for binder initialization methods and SessionAttributes for automatic session management of specific attributes.

This adapter can be customized through various bean properties. A common use case is to apply shared binder initialization logic through a custom WebBindingInitializer.

Summary

Constants
String PAGE_NOT_FOUND_LOG_CATEGORY Log category to use when no mapped handler is found for a request.
[Expand]
Inherited Constants
From class org.springframework.web.servlet.support.WebContentGenerator
From interface org.springframework.core.Ordered
Fields
protected static final Log pageNotFoundLogger Additional logger to use when no mapped handler is found for a request.
[Expand]
Inherited Fields
From class org.springframework.context.support.ApplicationObjectSupport
Public Constructors
AnnotationMethodHandlerAdapter()
Public Methods
long getLastModified(HttpServletRequest request, Object handler)
Same contract as for HttpServlet's getLastModified method.
HttpMessageConverter[]<?> getMessageConverters()
Return the message body converters that this adapter has been configured with.
int getOrder()
Return the order value of this object, with a higher value meaning greater in terms of sorting.
ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)
Use the given handler to handle this request.
void setAlwaysUseFullPath(boolean alwaysUseFullPath)
Set if URL lookup should always use the full path within the current servlet context.
void setBeanFactory(BeanFactory beanFactory)
Callback that supplies the owning factory to a bean instance.
void setCacheSecondsForSessionAttributeHandlers(int cacheSecondsForSessionAttributeHandlers)
Cache content produced by @SessionAttributes annotated handlers for the given number of seconds.
void setCustomArgumentResolver(WebArgumentResolver argumentResolver)
Set a custom WebArgumentResolvers to use for special method parameter types.
void setCustomArgumentResolvers(WebArgumentResolver[] argumentResolvers)
Set one or more custom WebArgumentResolvers to use for special method parameter types.
void setCustomModelAndViewResolver(ModelAndViewResolver customModelAndViewResolver)
Set a custom ModelAndViewResolvers to use for special method return types.
void setCustomModelAndViewResolvers(ModelAndViewResolver[] customModelAndViewResolvers)
Set one or more custom ModelAndViewResolvers to use for special method return types.
void setMessageConverters(HttpMessageConverter[]<?> messageConverters)
Set the message body converters to use.
void setMethodNameResolver(MethodNameResolver methodNameResolver)
Set the MethodNameResolver to use for resolving default handler methods (carrying an empty @RequestMapping annotation).
void setOrder(int order)
Specify the order value for this HandlerAdapter bean.
void setParameterNameDiscoverer(ParameterNameDiscoverer parameterNameDiscoverer)
Set the ParameterNameDiscoverer to use for resolving method parameter names if needed (e.g.
void setPathMatcher(PathMatcher pathMatcher)
Set the PathMatcher implementation to use for matching URL paths against registered URL patterns.
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 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.
void setWebBindingInitializer(WebBindingInitializer webBindingInitializer)
Specify a WebBindingInitializer which will apply pre-configured configuration to every DataBinder that this controller uses.
boolean supports(Object handler)
Given a handler instance, return whether or not this HandlerAdapter can support it.
Protected Methods
ServletRequestDataBinder createBinder(HttpServletRequest request, Object target, String objectName)
Template method for creating a new ServletRequestDataBinder instance.
HttpInputMessage createHttpInputMessage(HttpServletRequest servletRequest)
Template method for creating a new HttpInputMessage instance.
HttpOutputMessage createHttpOutputMessage(HttpServletResponse servletResponse)
Template method for creating a new HttpOuputMessage instance.
ModelAndView invokeHandlerMethod(HttpServletRequest request, HttpServletResponse response, Object handler)
[Expand]
Inherited Methods
From class org.springframework.web.servlet.support.WebContentGenerator
From class org.springframework.web.context.support.WebApplicationObjectSupport
From class org.springframework.context.support.ApplicationObjectSupport
From class java.lang.Object
From interface org.springframework.beans.factory.BeanFactoryAware
From interface org.springframework.context.ApplicationContextAware
From interface org.springframework.core.Ordered
From interface org.springframework.web.context.ServletContextAware
From interface org.springframework.web.servlet.HandlerAdapter

Constants

public static final String PAGE_NOT_FOUND_LOG_CATEGORY

Log category to use when no mapped handler is found for a request.

Constant Value: "org.springframework.web.servlet.PageNotFound"

Fields

protected static final Log pageNotFoundLogger

Additional logger to use when no mapped handler is found for a request.

Public Constructors

public AnnotationMethodHandlerAdapter ()

Public Methods

public long getLastModified (HttpServletRequest request, Object handler)

Same contract as for HttpServlet's getLastModified method. Can simply return -1 if there's no support in the handler class.

Parameters
request current HTTP request
handler handler to use
Returns
  • the lastModified value for the given handler

public HttpMessageConverter[]<?> getMessageConverters ()

Return the message body converters that this adapter has been configured with.

public int getOrder ()

Return the order value of this object, with a higher value meaning greater in terms of sorting.

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).

Returns
  • the order value

public ModelAndView handle (HttpServletRequest request, HttpServletResponse response, Object handler)

Use the given handler to handle this request. The workflow that is required may vary widely.

Parameters
request current HTTP request
response current HTTP response
handler handler to use. This object must have previously been passed to the supports method of this interface, which must have returned true.
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

public void setAlwaysUseFullPath (boolean alwaysUseFullPath)

Set if URL lookup should always use the full path within the current servlet context. Else, the path within the current servlet mapping is used if applicable (that is, in the case of a ".../*" servlet mapping in web.xml).

Default is "false".

public void setBeanFactory (BeanFactory beanFactory)

Callback that supplies the owning factory to a bean instance.

Invoked after the population of normal bean properties but before an initialization callback such as afterPropertiesSet() or a custom init-method.

Parameters
beanFactory owning BeanFactory (never null). The bean can immediately call methods on the factory.

public void setCacheSecondsForSessionAttributeHandlers (int cacheSecondsForSessionAttributeHandlers)

Cache content produced by @SessionAttributes annotated handlers for the given number of seconds. Default is 0, preventing caching completely.

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 annotated handlers only.

public void setCustomArgumentResolver (WebArgumentResolver argumentResolver)

Set a custom WebArgumentResolvers to use for special method parameter types.

Such a custom WebArgumentResolver will kick in first, having a chance to resolve an argument value before the standard argument handling kicks in.

public void setCustomArgumentResolvers (WebArgumentResolver[] argumentResolvers)

Set one or more custom WebArgumentResolvers to use for special method parameter types.

Any such custom WebArgumentResolver will kick in first, having a chance to resolve an argument value before the standard argument handling kicks in.

public void setCustomModelAndViewResolver (ModelAndViewResolver customModelAndViewResolver)

Set a custom ModelAndViewResolvers to use for special method return types.

Such a custom ModelAndViewResolver will kick in first, having a chance to resolve a return value before the standard ModelAndView handling kicks in.

public void setCustomModelAndViewResolvers (ModelAndViewResolver[] customModelAndViewResolvers)

Set one or more custom ModelAndViewResolvers to use for special method return types.

Any such custom ModelAndViewResolver will kick in first, having a chance to resolve a return value before the standard ModelAndView handling kicks in.

public void setMessageConverters (HttpMessageConverter[]<?> messageConverters)

Set the message body converters to use.

These converters are used to convert from and to HTTP requests and responses.

public void setMethodNameResolver (MethodNameResolver methodNameResolver)

Set the MethodNameResolver to use for resolving default handler methods (carrying an empty @RequestMapping annotation).

Will only kick in when the handler method cannot be resolved uniquely through the annotation metadata already.

public void setOrder (int order)

Specify the order value for this HandlerAdapter bean.

Default value is Integer.MAX_VALUE, meaning that it's non-ordered.

See Also

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 LocalVariableTableParameterNameDiscoverer.

public void setPathMatcher (PathMatcher pathMatcher)

Set the PathMatcher implementation to use for matching URL paths against registered URL patterns.

Default is AntPathMatcher.

public void setSessionAttributeStore (SessionAttributeStore sessionAttributeStore)

Specify the strategy to store session attributes with.

Default is DefaultSessionAttributeStore, storing session attributes in the HttpSession, using the same attribute name as in the model.

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.

public void setUrlDecode (boolean urlDecode)

Set if context path and request URI should be URL-decoded. Both are returned undecoded by the Servlet API, in contrast to the servlet path.

Uses either the request encoding or the default encoding according to the Servlet spec (ISO-8859-1).

public void setUrlPathHelper (UrlPathHelper urlPathHelper)

Set the UrlPathHelper to use for resolution of lookup paths.

Use this to override the default UrlPathHelper with a custom subclass, or to share common UrlPathHelper settings across multiple HandlerMappings and HandlerAdapters.

public void setWebBindingInitializer (WebBindingInitializer webBindingInitializer)

Specify a WebBindingInitializer which will apply pre-configured configuration to every DataBinder that this controller uses.

public boolean supports (Object handler)

Given a handler instance, return whether or not this HandlerAdapter can support it. Typical HandlerAdapters will base the decision on the handler type. HandlerAdapters will usually only support one handler type each.

A typical implementation:

return (handler instanceof MyHandler);

Parameters
handler handler object to check
Returns
  • whether or not this object can use the given handler

Protected Methods

protected ServletRequestDataBinder createBinder (HttpServletRequest request, Object target, String objectName)

Template method for creating a new ServletRequestDataBinder instance.

The default implementation creates a standard ServletRequestDataBinder. This can be overridden for custom ServletRequestDataBinder subclasses.

Parameters
request current HTTP request
target the target object to bind onto (or null if the binder is just used to convert a plain parameter value)
objectName the objectName of the target object
Returns
  • the ServletRequestDataBinder instance to use
Throws
Exception in case of invalid state or arguments

protected HttpInputMessage createHttpInputMessage (HttpServletRequest servletRequest)

Template method for creating a new HttpInputMessage instance.

The default implementation creates a standard ServletServerHttpRequest. This can be overridden for custom HttpInputMessage implementations

Parameters
servletRequest current HTTP request
Returns
  • the HttpInputMessage instance to use
Throws
Exception in case of errors

protected HttpOutputMessage createHttpOutputMessage (HttpServletResponse servletResponse)

Template method for creating a new HttpOuputMessage instance.

The default implementation creates a standard ServletServerHttpResponse. This can be overridden for custom HttpOutputMessage implementations

Parameters
servletResponse current HTTP response
Returns
  • the HttpInputMessage instance to use
Throws
Exception in case of errors

protected ModelAndView invokeHandlerMethod (HttpServletRequest request, HttpServletResponse response, Object handler)

Throws
Exception