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

## Class AbstractMessageConverterMethodProcessor

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

- All Implemented Interfaces:
    HandlerMethodArgumentResolver, HandlerMethodReturnValueHandler
  Direct Known Subclasses:
    HttpEntityMethodProcessor, RequestResponseBodyMethodProcessor

      public abstract class AbstractMessageConverterMethodProcessor
      extends AbstractMessageConverterMethodArgumentResolver
      implements HandlerMethodReturnValueHandler

  Extends `AbstractMessageConverterMethodArgumentResolver` with the ability to handle method return values by writing to the response with `HttpMessageConverters`.
  Since:
    3.1
  Author:
    Arjen Poutsma, Rossen Stoyanchev, Brian Clozel, Juergen Hoeller

- - ### Field Summary

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

      `logger, messageConverters`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `AbstractMessageConverterMethodProcessor(List<HttpMessageConverter<?>> converters)` Constructor with list of converters only.
    `protected` | `AbstractMessageConverterMethodProcessor(List<HttpMessageConverter<?>> converters, ContentNegotiationManager contentNegotiationManager)` Constructor with list of converters and ContentNegotiationManager.
    `protected` | `AbstractMessageConverterMethodProcessor(List<HttpMessageConverter<?>> converters, ContentNegotiationManager manager, List<Object> requestResponseBodyAdvice)` Constructor with list of converters and ContentNegotiationManager as well as request/response body advice instances.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected ServletServerHttpResponse` | `createOutputMessage(NativeWebRequest webRequest)` Creates a new `HttpOutputMessage` from the given `NativeWebRequest`.
    `protected List<MediaType>` | `getProducibleMediaTypes(HttpServletRequest request, Class<?> valueClass)` Returns the media types that can be produced.
    `protected List<MediaType>` | `getProducibleMediaTypes(HttpServletRequest request, Class<?> valueClass, Type targetType)` Returns the media types that can be produced.
    `protected Class<?>` | `getReturnValueType(Object value, MethodParameter returnType)` Return the type of the value to be written to the response.
    `protected boolean` | `isResourceType(Object value, MethodParameter returnType)` Return whether the returned value or the declared return type extends `Resource`.
    `protected <T> void` | `writeWithMessageConverters(T value, MethodParameter returnType, NativeWebRequest webRequest)` Writes the given return value to the given web request.
    `protected <T> void` | `writeWithMessageConverters(T value, MethodParameter returnType, ServletServerHttpRequest inputMessage, ServletServerHttpResponse outputMessage)` Writes the given return type to the given output message.

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

    - ### Methods inherited from interface org.springframework.web.method.support.HandlerMethodReturnValueHandler

      `handleReturnValue, supportsReturnType`

    - ### Methods inherited from interface org.springframework.web.method.support.HandlerMethodArgumentResolver

      `resolveArgument, supportsParameter`

- - ### Constructor Detail

    - #### AbstractMessageConverterMethodProcessor

          protected AbstractMessageConverterMethodProcessor(List<HttpMessageConverter<?>> converters)

      Constructor with list of converters only.

    - #### AbstractMessageConverterMethodProcessor

          protected AbstractMessageConverterMethodProcessor(List<HttpMessageConverter<?>> converters,
                                                            @Nullable
                                                            ContentNegotiationManager contentNegotiationManager)

      Constructor with list of converters and ContentNegotiationManager.

    - #### AbstractMessageConverterMethodProcessor

          protected AbstractMessageConverterMethodProcessor(List<HttpMessageConverter<?>> converters,
                                                            @Nullable
                                                            ContentNegotiationManager manager,
                                                            @Nullable
                                                            List<Object> requestResponseBodyAdvice)

      Constructor with list of converters and ContentNegotiationManager as well as request/response body advice instances.

  - ### Method Detail

    - #### createOutputMessage

          protected ServletServerHttpResponse createOutputMessage(NativeWebRequest webRequest)

      Creates a new `HttpOutputMessage` from the given `NativeWebRequest`.
      Parameters:
        `webRequest` - the web request to create an output message from
      Returns:
        the output message

    - #### writeWithMessageConverters

          protected <T> void writeWithMessageConverters(T value,
                                                        MethodParameter returnType,
                                                        NativeWebRequest webRequest)
                                                 throws IOException,
                                                        HttpMediaTypeNotAcceptableException,
                                                        HttpMessageNotWritableException

      Writes the given return value to the given web request. Delegates to `writeWithMessageConverters(Object, MethodParameter, ServletServerHttpRequest, ServletServerHttpResponse)`
      Throws:
        `IOException`
        `HttpMediaTypeNotAcceptableException`
        `HttpMessageNotWritableException`

    - #### writeWithMessageConverters

          protected <T> void writeWithMessageConverters(@Nullable
                                                        T value,
                                                        MethodParameter returnType,
                                                        ServletServerHttpRequest inputMessage,
                                                        ServletServerHttpResponse outputMessage)
                                                 throws IOException,
                                                        HttpMediaTypeNotAcceptableException,
                                                        HttpMessageNotWritableException

      Writes the given return type to the given output message.
      Parameters:
        `value` - the value to write to the output message
        `returnType` - the type of the value
        `inputMessage` - the input messages. Used to inspect the `Accept` header.
        `outputMessage` - the output message to write to
      Throws:
        `IOException` - thrown in case of I/O errors
        `HttpMediaTypeNotAcceptableException` - thrown when the conditions indicated by the `Accept` header on the request cannot be met by the message converters
        `HttpMessageNotWritableException` - thrown if a given message cannot be written by a converter, or if the content-type chosen by the server has no compatible converter.

    - #### getReturnValueType

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

      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>`).

    - #### isResourceType

          protected boolean isResourceType(@Nullable
                                           Object value,
                                           MethodParameter returnType)

      Return whether the returned value or the declared return type extends `Resource`.

    - #### getProducibleMediaTypes

          protected List<MediaType> getProducibleMediaTypes(HttpServletRequest request,
                                                            Class<?> valueClass)

      Returns the media types that can be produced.
      See Also:
        `getProducibleMediaTypes(HttpServletRequest, Class, Type)`

    - #### getProducibleMediaTypes

          protected List<MediaType> getProducibleMediaTypes(HttpServletRequest request,
                                                            Class<?> valueClass,
                                                            @Nullable
                                                            Type targetType)

      Returns the media types that can be produced. The resulting media types are:
      - The producible media types specified in the request mappings, or
      - Media types of configured converters that can write the specific return value, or
      - `MediaType.ALL`
      Since:
        4.2