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

## Class HttpEntityMethodProcessor

- java.lang.Object
- - org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver
  - - org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor
    - - org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor

- All Implemented Interfaces:
    HandlerMethodArgumentResolver, HandlerMethodReturnValueHandler

      public class HttpEntityMethodProcessor
      extends AbstractMessageConverterMethodProcessor

  Resolves `HttpEntity` and `RequestEntity` method argument values and also handles `HttpEntity` and `ResponseEntity` return values.

  An `HttpEntity` return type has a specific purpose. Therefore this handler should be configured ahead of handlers that support any return value type annotated with `@ModelAttribute` or `@ResponseBody` to ensure they don't take over.

  Since:
    3.1
  Author:
    Arjen Poutsma, Rossen Stoyanchev, Brian Clozel

- - ### Field Summary

    - ### Fields inherited from class org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver

      `logger, messageConverters`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `HttpEntityMethodProcessor(List<HttpMessageConverter<?>> converters)` Basic constructor with converters only.
    `HttpEntityMethodProcessor(List<HttpMessageConverter<?>> converters, ContentNegotiationManager manager)` Basic constructor with converters and `ContentNegotiationManager`.
    `HttpEntityMethodProcessor(List<HttpMessageConverter<?>> converters, ContentNegotiationManager manager, List<Object> requestResponseBodyAdvice)` Complete constructor for resolving `HttpEntity` and handling `ResponseEntity`.
    `HttpEntityMethodProcessor(List<HttpMessageConverter<?>> converters, List<Object> requestResponseBodyAdvice)` Complete constructor for resolving `HttpEntity` method arguments.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected Class<?>` | `getReturnValueType(Object returnValue, MethodParameter returnType)` Return the type of the value to be written to the response.
    `void` | `handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest)` Handle the given return value by adding attributes to the model and setting a view or setting the `ModelAndViewContainer.setRequestHandled(boolean)` flag to `true` to indicate the response has been handled directly.
    `Object` | `resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory)` Resolves a method parameter into an argument value from a given request.
    `boolean` | `supportsParameter(MethodParameter parameter)` Whether the given method parameter is supported by this resolver.
    `boolean` | `supportsReturnType(MethodParameter returnType)` Whether the given method return type is supported by this handler.

    - ### Methods inherited from class org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor

      `createOutputMessage, getProducibleMediaTypes, getProducibleMediaTypes, isResourceType, writeWithMessageConverters, writeWithMessageConverters`

    - ### Methods inherited from class org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver

      `adaptArgumentIfNecessary, createInputMessage, getSupportedMediaTypes, isBindExceptionRequired, readWithMessageConverters, readWithMessageConverters, validateIfApplicable`

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

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

- - ### Constructor Detail

    - #### HttpEntityMethodProcessor

          public HttpEntityMethodProcessor(List<HttpMessageConverter<?>> converters)

      Basic constructor with converters only. Suitable for resolving `HttpEntity`. For handling `ResponseEntity` consider also providing a `ContentNegotiationManager`.

    - #### HttpEntityMethodProcessor

          public HttpEntityMethodProcessor(List<HttpMessageConverter<?>> converters,
                                           ContentNegotiationManager manager)

      Basic constructor with converters and `ContentNegotiationManager`. Suitable for resolving `HttpEntity` and handling `ResponseEntity` without `Request~` or `ResponseBodyAdvice`.

    - #### HttpEntityMethodProcessor

          public HttpEntityMethodProcessor(List<HttpMessageConverter<?>> converters,
                                           List<Object> requestResponseBodyAdvice)

      Complete constructor for resolving `HttpEntity` method arguments. For handling `ResponseEntity` consider also providing a `ContentNegotiationManager`.
      Since:
        4.2

    - #### HttpEntityMethodProcessor

          public HttpEntityMethodProcessor(List<HttpMessageConverter<?>> converters,
                                           @Nullable
                                           ContentNegotiationManager manager,
                                           List<Object> requestResponseBodyAdvice)

      Complete constructor for resolving `HttpEntity` and handling `ResponseEntity`.

  - ### Method Detail

    - #### supportsParameter

          public boolean supportsParameter(MethodParameter parameter)

      Description copied from interface: `HandlerMethodArgumentResolver`
      Whether the given method parameter is supported by this resolver.
      Parameters:
        `parameter` - the method parameter to check
      Returns:
        `true` if this resolver supports the supplied parameter; `false` otherwise

    - #### supportsReturnType

          public boolean supportsReturnType(MethodParameter returnType)

      Description copied from interface: `HandlerMethodReturnValueHandler`
      Whether the given method return type is supported by this handler.
      Parameters:
        `returnType` - the method return type to check
      Returns:
        `true` if this handler supports the supplied return type; `false` otherwise

    - #### resolveArgument

          @Nullable
          public Object resolveArgument(MethodParameter parameter,
                                                  @Nullable
                                                  ModelAndViewContainer mavContainer,
                                                  NativeWebRequest webRequest,
                                                  @Nullable
                                                  WebDataBinderFactory binderFactory)
                                           throws IOException,
                                                  HttpMediaTypeNotSupportedException

      Description copied from interface: `HandlerMethodArgumentResolver`
      Resolves a method parameter into an argument value from a given request. A `ModelAndViewContainer` provides access to the model for the request. A `WebDataBinderFactory` provides a way to create a `WebDataBinder` instance when needed for data binding and type conversion purposes.
      Parameters:
        `parameter` - the method parameter to resolve. This parameter must have previously been passed to `HandlerMethodArgumentResolver.supportsParameter(org.springframework.core.MethodParameter)` which must have returned `true`.
        `mavContainer` - the ModelAndViewContainer for the current request
        `webRequest` - the current request
        `binderFactory` - a factory for creating `WebDataBinder` instances
      Returns:
        the resolved argument value, or `null` if not resolvable
      Throws:
        `IOException`
        `HttpMediaTypeNotSupportedException`

    - #### handleReturnValue

          public void handleReturnValue(@Nullable
                                        Object returnValue,
                                        MethodParameter returnType,
                                        ModelAndViewContainer mavContainer,
                                        NativeWebRequest webRequest)
                                 throws Exception

      Description copied from interface: `HandlerMethodReturnValueHandler`
      Handle the given return value by adding attributes to the model and setting a view or setting the `ModelAndViewContainer.setRequestHandled(boolean)` flag to `true` to indicate the response has been handled directly.
      Parameters:
        `returnValue` - the value returned from the handler method
        `returnType` - the type of the return value. This type must have previously been passed to `HandlerMethodReturnValueHandler.supportsReturnType(org.springframework.core.MethodParameter)` which must have returned `true`.
        `mavContainer` - the ModelAndViewContainer for the current request
        `webRequest` - the current request
      Throws:
        `Exception` - if the return value handling results in an error

    - #### getReturnValueType

          protected Class<?> getReturnValueType(@Nullable
                                                Object returnValue,
                                                MethodParameter returnType)

      Description copied from class: `AbstractMessageConverterMethodProcessor`
      Return the type of the value to be written to the response. Typically this is a simple check via getClass on the value but if the value is null, then the return type needs to be examined possibly including generic type determination (e.g. `ResponseEntity<T>`).
      Overrides:
        `getReturnValueType` in class `AbstractMessageConverterMethodProcessor`