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, Juergen Hoeller

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class org.springframework.web.method.HandlerMethod

      `HandlerMethod.HandlerMethodParameter`

  - ### 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.
    `ServletInvocableHandlerMethod(Object handler, Method method, MessageSource messageSource)` Variant of `ServletInvocableHandlerMethod(Object, Method)` that also accepts a `MessageSource`, e.g.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `invokeAndHandle(ServletWebRequest webRequest, ModelAndViewContainer mavContainer, Object... providedArgs)` Invoke the method and handle the return value through one of the configured `HandlerMethodReturnValueHandlers`.
    `void` | `setHandlerMethodReturnValueHandlers(HandlerMethodReturnValueHandlerComposite returnValueHandlers)` Register `HandlerMethodReturnValueHandler` instances to use to handle return values.

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

      `doInvoke, getMethodArgumentValues, invokeForRequest, setDataBinderFactory, setHandlerMethodArgumentResolvers, setParameterNameDiscoverer`

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

      `assertTargetBean, createWithResolvedBean, equals, findProvidedArgument, formatArgumentError, formatInvokeError, getBean, getBeanType, getBridgedMethod, getMethod, getMethodAnnotation, getMethodParameters, getResolvedFromHandlerMethod, getResponseStatus, getResponseStatusReason, getReturnType, getReturnValueType, getShortLogMessage, hashCode, hasMethodAnnotation, 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(Object handler,
                                               Method method,
                                               @Nullable
                                               MessageSource messageSource)

      Variant of `ServletInvocableHandlerMethod(Object, Method)` that also accepts a `MessageSource`, e.g. to resolve `@ResponseStatus` messages with.
      Since:
        5.3.10

    - #### 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 void invokeAndHandle(ServletWebRequest webRequest,
                                      ModelAndViewContainer mavContainer,
                                      Object... providedArgs)
                               throws Exception

      Invoke the method and handle the return value through one of the configured `HandlerMethodReturnValueHandlers`.
      Parameters:
        `webRequest` - the current request
        `mavContainer` - the ModelAndViewContainer for this request
        `providedArgs` - "given" arguments matched by type (not resolved)
      Throws:
        `Exception`