org.springframework.web.servlet.mvc.method

## Class AbstractHandlerMethodAdapter

- 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

- All Implemented Interfaces:
    Aware, ApplicationContextAware, Ordered, ServletContextAware, HandlerAdapter
  Direct Known Subclasses:
    RequestMappingHandlerAdapter

      public abstract class AbstractHandlerMethodAdapter
      extends WebContentGenerator
      implements HandlerAdapter, Ordered

  Abstract base class for `HandlerAdapter` implementations that support handlers of type `HandlerMethod`.
  Since:
    3.1
  Author:
    Arjen Poutsma

- - ### Field Summary

    - ### Fields inherited from class org.springframework.web.servlet.support.WebContentGenerator

      `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 and Description
    `AbstractHandlerMethodAdapter()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `long` | `getLastModified(HttpServletRequest request, Object handler)` Same contract as for HttpServlet's `getLastModified` method.
    `protected abstract long` | `getLastModifiedInternal(HttpServletRequest request, HandlerMethod handlerMethod)` Same contract as for `HttpServlet.getLastModified(HttpServletRequest)`.
    `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.
    `protected abstract ModelAndView` | `handleInternal(HttpServletRequest request, HttpServletResponse response, HandlerMethod handlerMethod)` Use the given handler method to handle the request.
    `void` | `setOrder(int order)` Specify the order value for this HandlerAdapter bean.
    `boolean` | `supports(Object handler)` Given a handler instance, return whether or not this HandlerAdapter can support it.
    `protected abstract boolean` | `supportsInternal(HandlerMethod handlerMethod)` Given a handler method, return whether or not this adapter can support it.

    - ### Methods inherited from class org.springframework.web.servlet.support.WebContentGenerator

      `applyCacheSeconds, applyCacheSeconds, cacheForSeconds, cacheForSeconds, checkAndPrepare, checkAndPrepare, getCacheSeconds, getSupportedMethods, isAlwaysMustRevalidate, isRequireSession, isUseCacheControlHeader, isUseCacheControlNoStore, isUseExpiresHeader, preventCaching, setAlwaysMustRevalidate, setCacheSeconds, setRequireSession, setSupportedMethods, setUseCacheControlHeader, setUseCacheControlNoStore, setUseExpiresHeader`

    - ### 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`

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

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

- - ### Constructor Detail

    - #### AbstractHandlerMethodAdapter

          public AbstractHandlerMethodAdapter()

  - ### Method Detail

    - #### setOrder

          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:
        `Ordered.getOrder()`

    - #### getOrder

          public int getOrder()

      Description copied from interface: `Ordered`
      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).

      Specified by:
        `getOrder` in interface `Ordered`
      Returns:
        the order value

    - #### supports

          public final 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);`

      This implementation expects the handler to be an `HandlerMethod`.

      Specified by:
        `supports` in interface `HandlerAdapter`
      Parameters:
        `handler` - the handler instance to check
      Returns:
        whether or not this adapter can adapt the given handler

    - #### supportsInternal

          protected abstract boolean supportsInternal(HandlerMethod handlerMethod)

      Given a handler method, return whether or not this adapter can support it.
      Parameters:
        `handlerMethod` - the handler method to check
      Returns:
        whether or not this adapter can adapt the given method

    - #### handle

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

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

      This implementation expects the handler to be an `HandlerMethod`.

      Specified by:
        `handle` in interface `HandlerAdapter`
      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` - in case of errors

    - #### handleInternal

          protected abstract ModelAndView handleInternal(HttpServletRequest request,
                                    HttpServletResponse response,
                                    HandlerMethod handlerMethod)
                                                  throws Exception

      Use the given handler method to handle the request.
      Parameters:
        `request` - current HTTP request
        `response` - current HTTP response
        `handlerMethod` - handler method to use. This object must have previously been passed to the `supportsInternal(HandlerMethod)` 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` - in case of errors

    - #### getLastModified

          public final 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.

      This implementation expects the handler to be an `HandlerMethod`.

      Specified by:
        `getLastModified` in interface `HandlerAdapter`
      Parameters:
        `request` - current HTTP request
        `handler` - handler to use
      Returns:
        the lastModified value for the given handler
      See Also:
        `HttpServlet.getLastModified(javax.servlet.http.HttpServletRequest)`, `LastModified.getLastModified(javax.servlet.http.HttpServletRequest)`

    - #### getLastModifiedInternal

          protected abstract long getLastModifiedInternal(HttpServletRequest request,
                                     HandlerMethod handlerMethod)

      Same contract as for `HttpServlet.getLastModified(HttpServletRequest)`.
      Parameters:
        `request` - current HTTP request
        `handlerMethod` - handler method to use
      Returns:
        the lastModified value for the given handler