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

## Class AbstractMessageConverterMethodArgumentResolver

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

- All Implemented Interfaces:
    HandlerMethodArgumentResolver
  Direct Known Subclasses:
    AbstractMessageConverterMethodProcessor, RequestPartMethodArgumentResolver

      public abstract class AbstractMessageConverterMethodArgumentResolver
      extends Object
      implements HandlerMethodArgumentResolver

  A base class for resolving method argument values by reading from the body of a request with `HttpMessageConverters`.
  Since:
    3.1
  Author:
    Arjen Poutsma, Rossen Stoyanchev, Juergen Hoeller

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected Log` | `logger`
    `protected List<HttpMessageConverter<?>>` | `messageConverters`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `AbstractMessageConverterMethodArgumentResolver(List<HttpMessageConverter<?>> converters)` Basic constructor with converters only.
    `AbstractMessageConverterMethodArgumentResolver(List<HttpMessageConverter<?>> converters, List<Object> requestResponseBodyAdvice)` Constructor with converters and `Request~` and `ResponseBodyAdvice`.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected Object` | `adaptArgumentIfNecessary(Object arg, MethodParameter parameter)` Adapt the given argument against the method parameter, if necessary.
    `protected ServletServerHttpRequest` | `createInputMessage(NativeWebRequest webRequest)` Create a new `HttpInputMessage` from the given `NativeWebRequest`.
    `protected List<MediaType>` | `getSupportedMediaTypes(Class<?> clazz)` Return the media types supported by all provided message converters sorted by specificity via `MediaType.sortBySpecificity(List)`.
    `protected boolean` | `isBindExceptionRequired(WebDataBinder binder, MethodParameter parameter)` Whether to raise a fatal bind exception on validation errors.
    `protected <T> Object` | `readWithMessageConverters(HttpInputMessage inputMessage, MethodParameter parameter, Type targetType)` Create the method argument value of the expected parameter type by reading from the given HttpInputMessage.
    `protected <T> Object` | `readWithMessageConverters(NativeWebRequest webRequest, MethodParameter parameter, Type paramType)` Create the method argument value of the expected parameter type by reading from the given request.
    `protected void` | `validateIfApplicable(WebDataBinder binder, MethodParameter parameter)` Validate the binding target if applicable.

    - ### 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.HandlerMethodArgumentResolver

      `resolveArgument, supportsParameter`

- - ### Field Detail

    - #### logger

          protected final Log logger

    - #### messageConverters

          protected final List<HttpMessageConverter<?>> messageConverters

  - ### Constructor Detail

    - #### AbstractMessageConverterMethodArgumentResolver

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

      Basic constructor with converters only.

    - #### AbstractMessageConverterMethodArgumentResolver

          public AbstractMessageConverterMethodArgumentResolver(List<HttpMessageConverter<?>> converters,
                                                                @Nullable
                                                                List<Object> requestResponseBodyAdvice)

      Constructor with converters and `Request~` and `ResponseBodyAdvice`.
      Since:
        4.2

  - ### Method Detail

    - #### readWithMessageConverters

          @Nullable
          protected <T> Object readWithMessageConverters(NativeWebRequest webRequest,
                                                                   MethodParameter parameter,
                                                                   Type paramType)
                                                            throws IOException,
                                                                   HttpMediaTypeNotSupportedException,
                                                                   HttpMessageNotReadableException

      Create the method argument value of the expected parameter type by reading from the given request.
      Type Parameters:
        `T` - the expected type of the argument value to be created
      Parameters:
        `webRequest` - the current request
        `parameter` - the method parameter descriptor (may be `null`)
        `paramType` - the type of the argument value to be created
      Returns:
        the created method argument value
      Throws:
        `IOException` - if the reading from the request fails
        `HttpMediaTypeNotSupportedException` - if no suitable message converter is found
        `HttpMessageNotReadableException`

    - #### readWithMessageConverters

          @Nullable
          protected <T> Object readWithMessageConverters(HttpInputMessage inputMessage,
                                                                   MethodParameter parameter,
                                                                   Type targetType)
                                                            throws IOException,
                                                                   HttpMediaTypeNotSupportedException,
                                                                   HttpMessageNotReadableException

      Create the method argument value of the expected parameter type by reading from the given HttpInputMessage.
      Type Parameters:
        `T` - the expected type of the argument value to be created
      Parameters:
        `inputMessage` - the HTTP input message representing the current request
        `parameter` - the method parameter descriptor
        `targetType` - the target type, not necessarily the same as the method parameter type, e.g. for `HttpEntity<String>`.
      Returns:
        the created method argument value
      Throws:
        `IOException` - if the reading from the request fails
        `HttpMediaTypeNotSupportedException` - if no suitable message converter is found
        `HttpMessageNotReadableException`

    - #### createInputMessage

          protected ServletServerHttpRequest createInputMessage(NativeWebRequest webRequest)

      Create a new `HttpInputMessage` from the given `NativeWebRequest`.
      Parameters:
        `webRequest` - the web request to create an input message from
      Returns:
        the input message

    - #### validateIfApplicable

          protected void validateIfApplicable(WebDataBinder binder,
                                              MethodParameter parameter)

      Validate the binding target if applicable.

      The default implementation checks for `@javax.validation.Valid`, Spring's `Validated`, and custom annotations whose name starts with "Valid".

      Parameters:
        `binder` - the DataBinder to be used
        `parameter` - the method parameter descriptor
      Since:
        4.1.5
      See Also:
        `isBindExceptionRequired(org.springframework.web.bind.WebDataBinder, org.springframework.core.MethodParameter)`

    - #### isBindExceptionRequired

          protected boolean isBindExceptionRequired(WebDataBinder binder,
                                                    MethodParameter parameter)

      Whether to raise a fatal bind exception on validation errors.
      Parameters:
        `binder` - the data binder used to perform data binding
        `parameter` - the method parameter descriptor
      Returns:
        `true` if the next method argument is not of type `Errors`
      Since:
        4.1.5

    - #### getSupportedMediaTypes

          protected List<MediaType> getSupportedMediaTypes(Class<?> clazz)

      Return the media types supported by all provided message converters sorted by specificity via `MediaType.sortBySpecificity(List)`.
      Since:
        5.3.4

    - #### adaptArgumentIfNecessary

          @Nullable
          protected Object adaptArgumentIfNecessary(@Nullable
                                                              Object arg,
                                                              MethodParameter parameter)

      Adapt the given argument against the method parameter, if necessary.
      Parameters:
        `arg` - the resolved argument
        `parameter` - the method parameter descriptor
      Returns:
        the adapted argument, or the original resolved argument as-is
      Since:
        4.3.5