Package 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:
  `org.springframework.web.method.support.HandlerMethodArgumentResolver`, `org.springframework.web.method.support.HandlerMethodReturnValueHandler`

Direct Known Subclasses:
  `HttpEntityMethodProcessor`, `RequestResponseBodyMethodProcessor`

public abstract class AbstractMessageConverterMethodProcessor extends AbstractMessageConverterMethodArgumentResolver implements org.springframework.web.method.support.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, Sebastien Deleuze

## Nested Class Summary

## Nested classes/interfaces inherited from class org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver

`AbstractMessageConverterMethodArgumentResolver.ConverterType`

## Field Summary

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

`logger, messageConverters`

## Constructor Summary

Constructors
Modifier
Constructor
Description
`protected`
`AbstractMessageConverterMethodProcessor(List<org.springframework.http.converter.HttpMessageConverter<?>> converters)`
Constructor with list of converters only.
`protected`
`AbstractMessageConverterMethodProcessor(List<org.springframework.http.converter.HttpMessageConverter<?>> converters, org.springframework.web.accept.ContentNegotiationManager contentNegotiationManager)`
Constructor with list of converters and ContentNegotiationManager.
`protected`
`AbstractMessageConverterMethodProcessor(List<org.springframework.http.converter.HttpMessageConverter<?>> converters, org.springframework.web.accept.ContentNegotiationManager manager, List<Object> requestResponseBodyAdvice)`
Variant of `AbstractMessageConverterMethodProcessor(List)` with an additional `ContentNegotiationManager` for return value handling.
`protected`
`AbstractMessageConverterMethodProcessor(List<org.springframework.http.converter.HttpMessageConverter<?>> converters, org.springframework.web.accept.ContentNegotiationManager manager, List<Object> requestResponseBodyAdvice, List<org.springframework.web.ErrorResponse.Interceptor> interceptors)`
Variant of `AbstractMessageConverterMethodProcessor(List, ContentNegotiationManager, List)` with additional list of `ErrorResponse.Interceptor`s for return value handling.

## Method Summary

Modifier and Type
Method
Description
`protected org.springframework.http.server.ServletServerHttpResponse`
`createOutputMessage(org.springframework.web.context.request.NativeWebRequest webRequest)`
Creates a new `HttpOutputMessage` from the given `NativeWebRequest`.
`protected List<org.springframework.http.MediaType>`
`getProducibleMediaTypes(HttpServletRequest request, Class<?> valueClass)`
Returns the media types that can be produced.
`protected List<org.springframework.http.MediaType>`
`getProducibleMediaTypes(HttpServletRequest request, Class<?> valueClass, Type targetType)`
Returns the media types that can be produced.
`protected Class<?>`
`getReturnValueType(Object value, org.springframework.core.MethodParameter returnType)`
Return the type of the value to be written to the response.
`protected void`
`invokeErrorResponseInterceptors(org.springframework.http.ProblemDetail detail, org.springframework.web.ErrorResponse errorResponse)`
Invoke the configured `ErrorResponse.Interceptor`'s.
`protected boolean`
`isResourceType(Object value, org.springframework.core.MethodParameter returnType)`
Return whether the returned value or the declared return type extends `Resource`.
`protected <T> void`
`writeWithMessageConverters(T value, org.springframework.core.MethodParameter returnType, org.springframework.http.server.ServletServerHttpRequest inputMessage, org.springframework.http.server.ServletServerHttpResponse outputMessage)`
Writes the given return type to the given output message.
`protected <T> void`
`writeWithMessageConverters(T value, org.springframework.core.MethodParameter returnType, org.springframework.web.context.request.NativeWebRequest webRequest)`
Writes the given return value to the given web request.

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

`adaptArgumentIfNecessary, createInputMessage, getNestedTypeIfNeeded, 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.HandlerMethodArgumentResolver

`resolveArgument, supportsParameter`

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

`handleReturnValue, supportsReturnType`

## Constructor Details

### AbstractMessageConverterMethodProcessor

protected AbstractMessageConverterMethodProcessor(List<org.springframework.http.converter.HttpMessageConverter<?>> converters)
Constructor with list of converters only.

### AbstractMessageConverterMethodProcessor

protected AbstractMessageConverterMethodProcessor(List<org.springframework.http.converter.HttpMessageConverter<?>> converters, @Nullable org.springframework.web.accept.ContentNegotiationManager contentNegotiationManager)
Constructor with list of converters and ContentNegotiationManager.

### AbstractMessageConverterMethodProcessor

protected AbstractMessageConverterMethodProcessor(List<org.springframework.http.converter.HttpMessageConverter<?>> converters, @Nullable org.springframework.web.accept.ContentNegotiationManager manager, @Nullable List<Object> requestResponseBodyAdvice)
Variant of `AbstractMessageConverterMethodProcessor(List)` with an additional `ContentNegotiationManager` for return value handling.

### AbstractMessageConverterMethodProcessor

protected AbstractMessageConverterMethodProcessor(List<org.springframework.http.converter.HttpMessageConverter<?>> converters, @Nullable org.springframework.web.accept.ContentNegotiationManager manager, @Nullable List<Object> requestResponseBodyAdvice, List<org.springframework.web.ErrorResponse.Interceptor> interceptors)
Variant of `AbstractMessageConverterMethodProcessor(List, ContentNegotiationManager, List)` with additional list of `ErrorResponse.Interceptor`s for return value handling.

Since:
  6.2

## Method Details

### createOutputMessage

protected org.springframework.http.server.ServletServerHttpResponse createOutputMessage(org.springframework.web.context.request.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

### invokeErrorResponseInterceptors

protected void invokeErrorResponseInterceptors(org.springframework.http.ProblemDetail detail, @Nullable org.springframework.web.ErrorResponse errorResponse)
Invoke the configured `ErrorResponse.Interceptor`'s.

Since:
  6.2

### writeWithMessageConverters

protected <T> void writeWithMessageConverters(T value, org.springframework.core.MethodParameter returnType, org.springframework.web.context.request.NativeWebRequest webRequest) throws IOException, org.springframework.web.HttpMediaTypeNotAcceptableException, org.springframework.http.converter.HttpMessageNotWritableException
Writes the given return value to the given web request. Delegates to `writeWithMessageConverters(Object, MethodParameter, ServletServerHttpRequest, ServletServerHttpResponse)`

Throws:
  `IOException`
  `org.springframework.web.HttpMediaTypeNotAcceptableException`
  `org.springframework.http.converter.HttpMessageNotWritableException`

### writeWithMessageConverters

protected <T> void writeWithMessageConverters(@Nullable T value, org.springframework.core.MethodParameter returnType, org.springframework.http.server.ServletServerHttpRequest inputMessage, org.springframework.http.server.ServletServerHttpResponse outputMessage) throws IOException, org.springframework.web.HttpMediaTypeNotAcceptableException, org.springframework.http.converter.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
  `org.springframework.web.HttpMediaTypeNotAcceptableException` - thrown when the conditions indicated by the `Accept` header on the request cannot be met by the message converters
  `org.springframework.http.converter.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, org.springframework.core.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 (for example, `ResponseEntity<T>`).

### isResourceType

protected boolean isResourceType(@Nullable Object value, org.springframework.core.MethodParameter returnType)
Return whether the returned value or the declared return type extends `Resource`.

### getProducibleMediaTypes

protected List<org.springframework.http.MediaType> getProducibleMediaTypes(HttpServletRequest request, Class<?> valueClass)
Returns the media types that can be produced.

See Also:
  - `getProducibleMediaTypes(HttpServletRequest, Class, Type)`

### getProducibleMediaTypes

protected List<org.springframework.http.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