org.springframework.web.servlet.mvc.method.annotation

## Class ServletInvocableHandlerMethod

- java.lang.Object
- - org.springframework.web.method.HandlerMethod
  - - org.springframework.web.method.support.InvocableHandlerMethod
    - - org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod

-     public class ServletInvocableHandlerMethod
      extends InvocableHandlerMethod

  Extends `InvocableHandlerMethod` with the ability to handle return values through a registered `HandlerMethodReturnValueHandler` and also supports setting the response status based on a method-level `@ResponseStatus` annotation.

  A `null` return value (including void) may be interpreted as the end of request processing in combination with a `@ResponseStatus` annotation, a not-modified check condition (see `ServletWebRequest.checkNotModified(long)`), or a method argument that provides access to the response stream.

  Since:
    3.1
  Author:
    Rossen Stoyanchev

- - ### Field Summary

    - ### Fields inherited from class org.springframework.web.method.HandlerMethod

      `logger`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ServletInvocableHandlerMethod(HandlerMethod handlerMethod)` Create an instance from a `HandlerMethod`.
    `ServletInvocableHandlerMethod(Object handler, Method method)` Creates an instance from the given handler and method.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `invokeAndHandle(ServletWebRequest webRequest, ModelAndViewContainer mavContainer, Object... providedArgs)` Invokes the method and handles the return value through a registered `HandlerMethodReturnValueHandler`.
    `void` | `setHandlerMethodReturnValueHandlers(HandlerMethodReturnValueHandlerComposite returnValueHandlers)` Register `HandlerMethodReturnValueHandler` instances to use to handle return values.

    - ### Methods inherited from class org.springframework.web.method.support.InvocableHandlerMethod

      `getDetailedErrorMessage, invokeForRequest, setDataBinderFactory, setHandlerMethodArgumentResolvers, setParameterNameDiscoverer`

    - ### Methods inherited from class org.springframework.web.method.HandlerMethod

      `createWithResolvedBean, equals, getBean, getBeanType, getBridgedMethod, getMethod, getMethodAnnotation, getMethodParameters, getReturnType, getReturnValueType, hashCode, isVoid, toString`

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

      `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

- - ### Constructor Detail

    - #### ServletInvocableHandlerMethod

          public ServletInvocableHandlerMethod(Object handler,
                                       Method method)

      Creates an instance from the given handler and method.

    - #### ServletInvocableHandlerMethod

          public ServletInvocableHandlerMethod(HandlerMethod handlerMethod)

      Create an instance from a `HandlerMethod`.

  - ### Method Detail

    - #### setHandlerMethodReturnValueHandlers

          public void setHandlerMethodReturnValueHandlers(HandlerMethodReturnValueHandlerComposite returnValueHandlers)

      Register `HandlerMethodReturnValueHandler` instances to use to handle return values.

    - #### invokeAndHandle

          public final void invokeAndHandle(ServletWebRequest webRequest,
                             ModelAndViewContainer mavContainer,
                             Object... providedArgs)
                                     throws Exception

      Invokes the method and handles the return value through a registered `HandlerMethodReturnValueHandler`.
      Parameters:
        `webRequest` - the current request
        `mavContainer` - the ModelAndViewContainer for this request
        `providedArgs` - "given" arguments matched by type, not resolved
      Throws:
        `Exception`