org.springframework.web.servlet.mvc.support

## Class AbstractControllerUrlHandlerMapping

- 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.support.AbstractControllerUrlHandlerMapping

- All Implemented Interfaces:
    Aware, ApplicationContextAware, Ordered, ServletContextAware, HandlerMapping
  Direct Known Subclasses:
    ControllerBeanNameHandlerMapping, ControllerClassNameHandlerMapping

      public abstract class AbstractControllerUrlHandlerMapping
      extends AbstractDetectingUrlHandlerMapping

  Base class for `HandlerMapping` implementations that derive URL paths according to conventions for specific controller types.
  Since:
    2.5.3
  Author:
    Juergen Hoeller
  See Also:
    `ControllerClassNameHandlerMapping`, `ControllerBeanNameHandlerMapping`

- - ### Field Summary

    - ### Fields inherited from class org.springframework.context.support.ApplicationObjectSupport

      `logger`

    - ### Fields inherited from interface org.springframework.web.servlet.HandlerMapping

      `BEST_MATCHING_PATTERN_ATTRIBUTE, INTROSPECT_TYPE_LEVEL_MAPPING, MATRIX_VARIABLES_ATTRIBUTE, PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE, PRODUCIBLE_MEDIA_TYPES_ATTRIBUTE, URI_TEMPLATE_VARIABLES_ATTRIBUTE`

    - ### Fields inherited from interface org.springframework.core.Ordered

      `HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `AbstractControllerUrlHandlerMapping()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected abstract String[]` | `buildUrlsForHandler(String beanName, Class beanClass)` Abstract template method to be implemented by subclasses.
    `protected String[]` | `determineUrlsForHandler(String beanName)` This implementation delegates to `buildUrlsForHandler(java.lang.String, java.lang.Class)`, provided that `isEligibleForMapping(java.lang.String, java.lang.Class)` returns `true`.
    `protected boolean` | `isControllerType(Class beanClass)` Determine whether the given bean class indicates a controller type that is supported by this mapping strategy.
    `protected boolean` | `isEligibleForMapping(String beanName, Class beanClass)` Determine whether the specified controller is excluded from this mapping.
    `protected boolean` | `isMultiActionControllerType(Class beanClass)` Determine whether the given bean class indicates a controller type that dispatches to multiple action methods.
    `void` | `setExcludedClasses(Class[] excludedClasses)` Specify controller classes that should be excluded from this mapping.
    `void` | `setExcludedPackages(String[] excludedPackages)` Specify Java packages that should be excluded from this mapping.
    `void` | `setIncludeAnnotatedControllers(boolean includeAnnotatedControllers)` Set whether to activate or deactivate detection of annotated controllers.

    - ### Methods inherited from class org.springframework.web.servlet.handler.AbstractDetectingUrlHandlerMapping

      `detectHandlers, initApplicationContext, setDetectHandlersInAncestorContexts`

    - ### Methods inherited from class org.springframework.web.servlet.handler.AbstractUrlHandlerMapping

      `buildPathExposingHandler, exposePathWithinMapping, exposeUriTemplateVariables, getHandlerInternal, getHandlerMap, getRootHandler, lookupHandler, registerHandler, registerHandler, setLazyInitHandlers, setRootHandler, supportsTypeLevelMappings, validateHandler`

    - ### Methods inherited from class org.springframework.web.servlet.handler.AbstractHandlerMapping

      `adaptInterceptor, detectMappedInterceptors, extendInterceptors, getAdaptedInterceptors, getDefaultHandler, getHandler, getHandlerExecutionChain, getMappedInterceptors, getOrder, getPathMatcher, getUrlPathHelper, initInterceptors, setAlwaysUseFullPath, setDefaultHandler, setInterceptors, setOrder, setPathMatcher, setRemoveSemicolonContent, setUrlDecode, setUrlPathHelper`

    - ### 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, requiredContextClass, setApplicationContext`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### AbstractControllerUrlHandlerMapping

          public AbstractControllerUrlHandlerMapping()

  - ### Method Detail

    - #### setIncludeAnnotatedControllers

          public void setIncludeAnnotatedControllers(boolean includeAnnotatedControllers)

      Set whether to activate or deactivate detection of annotated controllers.

    - #### setExcludedPackages

          public void setExcludedPackages(String[] excludedPackages)

      Specify Java packages that should be excluded from this mapping. Any classes in such a package (or any of its subpackages) will be ignored by this HandlerMapping.

      Default is to exclude the entire "org.springframework.web.servlet.mvc" package, including its subpackages, since none of Spring's out-of-the-box Controller implementations is a reasonable candidate for this mapping strategy. Such controllers are typically handled by a separate HandlerMapping, e.g. a `BeanNameUrlHandlerMapping`, alongside this ControllerClassNameHandlerMapping for application controllers.

    - #### setExcludedClasses

          public void setExcludedClasses(Class[] excludedClasses)

      Specify controller classes that should be excluded from this mapping. Any such classes will simply be ignored by this HandlerMapping.

    - #### determineUrlsForHandler

          protected String[] determineUrlsForHandler(String beanName)

      This implementation delegates to `buildUrlsForHandler(java.lang.String, java.lang.Class)`, provided that `isEligibleForMapping(java.lang.String, java.lang.Class)` returns `true`.
      Specified by:
        `determineUrlsForHandler` in class `AbstractDetectingUrlHandlerMapping`
      Parameters:
        `beanName` - the name of the candidate bean
      Returns:
        the URLs determined for the bean, or `null` or an empty array if none

    - #### isEligibleForMapping

          protected boolean isEligibleForMapping(String beanName,
                                     Class beanClass)

      Determine whether the specified controller is excluded from this mapping.
      Parameters:
        `beanName` - the name of the controller bean
        `beanClass` - the concrete class of the controller bean
      Returns:
        whether the specified class is excluded
      See Also:
        `setExcludedPackages(java.lang.String[])`, `setExcludedClasses(java.lang.Class[])`

    - #### isControllerType

          protected boolean isControllerType(Class beanClass)

      Determine whether the given bean class indicates a controller type that is supported by this mapping strategy.
      Parameters:
        `beanClass` - the class to introspect

    - #### isMultiActionControllerType

          protected boolean isMultiActionControllerType(Class beanClass)

      Determine whether the given bean class indicates a controller type that dispatches to multiple action methods.
      Parameters:
        `beanClass` - the class to introspect

    - #### buildUrlsForHandler

          protected abstract String[] buildUrlsForHandler(String beanName,
                                     Class beanClass)

      Abstract template method to be implemented by subclasses.
      Parameters:
        `beanName` - the name of the bean
        `beanClass` - the type of the bean
      Returns:
        the URLs determined for the bean