public class

DefaultAnnotationHandlerMapping

extends AbstractDetectingUrlHandlerMapping
java.lang.Object
   ↳ org.springframework.context.support.ApplicationObjectSupport
     ↳ org.springframework.web.context.support.WebApplicationObjectSupport
       ↳ org.springframework.web.servlet.handler.AbstractHandlerMapping
         ↳ org.springframework.web.servlet.handler.AbstractUrlHandlerMapping
           ↳ org.springframework.web.servlet.handler.AbstractDetectingUrlHandlerMapping
             ↳ org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping

Class Overview

Implementation of the HandlerMapping interface that maps handlers based on HTTP paths expressed through the RequestMapping annotation at the type or method level.

Registered by default in DispatcherServlet on Java 5+. NOTE: If you define custom HandlerMapping beans in your DispatcherServlet context, you need to add a DefaultAnnotationHandlerMapping bean explicitly, since custom HandlerMapping beans replace the default mapping strategies. Defining a DefaultAnnotationHandlerMapping also allows for registering custom interceptors:

 <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
   <property name="interceptors">
     ...
   </property>
 </bean>
Annotated controllers are usually marked with the Controller stereotype at the type level. This is not strictly necessary when RequestMapping is applied at the type level (since such a handler usually implements the Controller interface). However, Controller is required for detecting RequestMapping annotations at the method level if RequestMapping is not present at the type level.

NOTE: Method-level mappings are only allowed to narrow the mapping expressed at the class level (if any). HTTP paths need to uniquely map onto specific handler beans, with any given HTTP path only allowed to be mapped onto one specific handler bean (not spread across multiple handler beans). It is strongly recommended to co-locate related handler methods into the same bean.

The AnnotationMethodHandlerAdapter is responsible for processing annotated handler methods, as mapped by this HandlerMapping. For RequestMapping at the type level, specific HandlerAdapters such as SimpleControllerHandlerAdapter apply.

Summary

[Expand]
Inherited Constants
From interface org.springframework.core.Ordered
[Expand]
Inherited Fields
From class org.springframework.context.support.ApplicationObjectSupport
From interface org.springframework.web.servlet.HandlerMapping
Public Constructors
DefaultAnnotationHandlerMapping()
Public Methods
void setUseDefaultSuffixPattern(boolean useDefaultSuffixPattern)
Set whether to register paths using the default suffix pattern as well: i.e.
Protected Methods
void addUrlsForPath(Set<String> urls, String path)
Add URLs and/or URL patterns for the given path.
String[] determineUrlsForHandler(String beanName)
Checks for presence of the RequestMapping annotation on the handler class and on any of its methods.
String[] determineUrlsForHandlerMethods(Class<?> handlerType)
Derive URL mappings from the handler's method-level mappings.
String[] determineUrlsForHandlerMethods(Class<?> handlerType, boolean hasTypeLevelMapping)
Derive URL mappings from the handler's method-level mappings.
boolean supportsTypeLevelMappings()
Indicates whether this handler mapping support type-level mappings.
void validateHandler(Object handler, HttpServletRequest request)
Validate the given annotated handler against the current request.
void validateMapping(RequestMapping mapping, HttpServletRequest request)
Validate the given type-level mapping metadata against the current request, checking HTTP request method and parameter conditions.
[Expand]
Inherited Methods
From class org.springframework.web.servlet.handler.AbstractDetectingUrlHandlerMapping
From class org.springframework.web.servlet.handler.AbstractUrlHandlerMapping
From class org.springframework.web.servlet.handler.AbstractHandlerMapping
From class org.springframework.web.context.support.WebApplicationObjectSupport
From class org.springframework.context.support.ApplicationObjectSupport
From class java.lang.Object
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.HandlerMapping

Public Constructors

public DefaultAnnotationHandlerMapping ()

Public Methods

public void setUseDefaultSuffixPattern (boolean useDefaultSuffixPattern)

Set whether to register paths using the default suffix pattern as well: i.e. whether "/users" should be registered as "/users.*" and "/users/" too.

Default is "true". Turn this convention off if you intend to interpret your @RequestMapping paths strictly.

Note that paths which include a ".xxx" suffix or end with "/" already will not be transformed using the default suffix pattern in any case.

Protected Methods

protected void addUrlsForPath (Set<String> urls, String path)

Add URLs and/or URL patterns for the given path.

Parameters
urls the Set of URLs for the current bean
path the currently introspected path

protected String[] determineUrlsForHandler (String beanName)

Checks for presence of the RequestMapping annotation on the handler class and on any of its methods.

Parameters
beanName the name of the candidate bean
Returns
  • the URLs determined for the bean, or null or an empty array if none

protected String[] determineUrlsForHandlerMethods (Class<?> handlerType)

Derive URL mappings from the handler's method-level mappings.

Parameters
handlerType the handler type to introspect
Returns
  • the array of mapped URLs

protected String[] determineUrlsForHandlerMethods (Class<?> handlerType, boolean hasTypeLevelMapping)

Derive URL mappings from the handler's method-level mappings.

Parameters
handlerType the handler type to introspect
hasTypeLevelMapping whether the method-level mappings are nested within a type-level mapping
Returns
  • the array of mapped URLs

protected boolean supportsTypeLevelMappings ()

Indicates whether this handler mapping support type-level mappings. Default to false.

protected void validateHandler (Object handler, HttpServletRequest request)

Validate the given annotated handler against the current request.

Parameters
handler the handler object to validate
request current HTTP request
Throws
Exception

protected void validateMapping (RequestMapping mapping, HttpServletRequest request)

Validate the given type-level mapping metadata against the current request, checking HTTP request method and parameter conditions.

Parameters
mapping the mapping metadata to validate
request current HTTP request
Throws
Exception if validation failed