Top Description Constructors Methods
org.springframework.web.servlet.mvc.method.annotation

public Class RequestResponseBodyMethodProcessor

extends AbstractMessageConverterMethodProcessor
Class Inheritance
Imports
java.io.IOException, java.lang.reflect.Type, java.net.URI, java.util.List, org.springframework.core.Conventions, .MethodParameter, .ResolvableType, org.springframework.core.annotation.AnnotatedElementUtils, org.springframework.http.HttpStatusCode, .ProblemDetail, org.springframework.http.converter.HttpMessageConverter, .HttpMessageNotReadableException, .HttpMessageNotWritableException, org.springframework.http.server.ServletServerHttpRequest, .ServletServerHttpResponse, org.springframework.lang.Nullable, org.springframework.validation.BindingResult, org.springframework.web.HttpMediaTypeNotAcceptableException, .HttpMediaTypeNotSupportedException, org.springframework.web.accept.ContentNegotiationManager, org.springframework.web.bind.MethodArgumentNotValidException, .WebDataBinder, org.springframework.web.bind.annotation.RequestBody, .ResponseBody, org.springframework.web.bind.support.WebDataBinderFactory, org.springframework.web.context.request.NativeWebRequest, org.springframework.web.method.support.ModelAndViewContainer, org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver

Resolves method arguments annotated with @RequestBody and handles return values from methods annotated with @ResponseBody by reading and writing to the body of the request or response with an HttpMessageConverter.

An @RequestBody method argument is also validated if it is annotated with any annotations that trigger validation. In case of validation failure, MethodArgumentNotValidException is raised and results in an HTTP 400 response status code if DefaultHandlerExceptionResolver is configured.

Authors
Arjen Poutsma, Rossen Stoyanchev, Juergen Hoeller
Since
3.1

Constructor Summary

AccessConstructor and Description
public
RequestResponseBodyMethodProcessor(List<HttpMessageConverter<?>> converters)

Basic constructor with converters only.

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

Basic constructor with converters and ContentNegotiationManager.

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

Complete constructor for resolving @RequestBody method arguments.

public
RequestResponseBodyMethodProcessor(List<HttpMessageConverter<?>> converters, ContentNegotiationManager manager, List<Object> requestResponseBodyAdvice)

Complete constructor for resolving @RequestBody and handling @ResponseBody.

Method Summary

Modifier and TypeMethod and Description
protected boolean
public void
handleReturnValue(Object
the value returned from the handler method
returnValue
,
MethodParameter
the type of the return value. This type must have previously been passed to supportsReturnType which must have returned true.
returnType
,
ModelAndViewContainer
the ModelAndViewContainer for the current request
mavContainer
,
NativeWebRequest
the current request
webRequest
)

Implements org.springframework.web.method.support.HandlerMethodReturnValueHandler.handleReturnValue.

Handle the given return value by adding attributes to the model and setting a view or setting the ModelAndViewContainer#setRequestHandled flag to true to indicate the response has been handled directly.

protected <T> Object
readWithMessageConverters(NativeWebRequest
the current request
webRequest
,
MethodParameter
the method parameter descriptor (may be null)
parameter
,
Type
the type of the argument value to be created
paramType
)

Overrides org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters.

Create the method argument value of the expected parameter type by reading from the given request.

public Object
resolveArgument(MethodParameter
the method parameter to resolve. This parameter must have previously been passed to supportsParameter which must have returned true.
parameter
,
ModelAndViewContainer
the ModelAndViewContainer for the current request
mavContainer
,
NativeWebRequest
the current request
webRequest
,
WebDataBinderFactory
a factory for creating WebDataBinder instances
binderFactory
)

Implements org.springframework.web.method.support.HandlerMethodArgumentResolver.resolveArgument.

Throws MethodArgumentNotValidException if validation fails.

public boolean
supportsParameter(MethodParameter
the method parameter to check
parameter
)

Implements org.springframework.web.method.support.HandlerMethodArgumentResolver.supportsParameter.

Whether the given method parameter is supported by this resolver.

public boolean
supportsReturnType(MethodParameter
the method return type to check
returnType
)

Implements org.springframework.web.method.support.HandlerMethodReturnValueHandler.supportsReturnType.

Whether the given method return type is supported by this handler.

Inherited from org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor:
createOutputMessagegetProducibleMediaTypesgetProducibleMediaTypesgetReturnValueTypeisResourceTypewriteWithMessageConverterswriteWithMessageConverters

Constructor Detail

RequestResponseBodyMethodProcessorback to summary
public RequestResponseBodyMethodProcessor(List<HttpMessageConverter<?>> converters)

Basic constructor with converters only. Suitable for resolving @RequestBody. For handling @ResponseBody consider also providing a ContentNegotiationManager.

RequestResponseBodyMethodProcessorback to summary
public RequestResponseBodyMethodProcessor(List<HttpMessageConverter<?>> converters, ContentNegotiationManager manager)

Basic constructor with converters and ContentNegotiationManager. Suitable for resolving @RequestBody and handling @ResponseBody without Request~ or ResponseBodyAdvice.

RequestResponseBodyMethodProcessorback to summary
public RequestResponseBodyMethodProcessor(List<HttpMessageConverter<?>> converters, List<Object> requestResponseBodyAdvice)

Complete constructor for resolving @RequestBody method arguments. For handling @ResponseBody consider also providing a ContentNegotiationManager.

Since
4.2
RequestResponseBodyMethodProcessorback to summary
public RequestResponseBodyMethodProcessor(List<HttpMessageConverter<?>> converters, ContentNegotiationManager manager, List<Object> requestResponseBodyAdvice)

Complete constructor for resolving @RequestBody and handling @ResponseBody.

Method Detail

checkRequiredback to summary
protected boolean checkRequired(MethodParameter parameter)
handleReturnValueback to summary
public void handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws IOException, HttpMediaTypeNotAcceptableException, HttpMessageNotWritableException

Implements org.springframework.web.method.support.HandlerMethodReturnValueHandler.handleReturnValue.

Doc from org.springframework.web.method.support.HandlerMethodReturnValueHandler.handleReturnValue.

Handle the given return value by adding attributes to the model and setting a view or setting the ModelAndViewContainer#setRequestHandled flag to true to indicate the response has been handled directly.

Parameters
returnValue:Object

the value returned from the handler method

returnType:MethodParameter

the type of the return value. This type must have previously been passed to supportsReturnType which must have returned true.

mavContainer:ModelAndViewContainer

the ModelAndViewContainer for the current request

webRequest:NativeWebRequest

the current request

Annotations
@Override
readWithMessageConvertersback to summary
protected <T> Object readWithMessageConverters(NativeWebRequest webRequest, MethodParameter parameter, Type paramType) throws IOException, HttpMediaTypeNotSupportedException, HttpMessageNotReadableException

Overrides org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters.

Doc from org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters.

Create the method argument value of the expected parameter type by reading from the given request.

Parameters
<T>
the expected type of the argument value to be created
webRequest:NativeWebRequest

the current request

parameter:MethodParameter

the method parameter descriptor (may be null)

paramType:Type

the type of the argument value to be created

Returns:Object

the created method argument value

Annotations
@Override
Exceptions
IOException:
if the reading from the request fails
HttpMediaTypeNotSupportedException:
if no suitable message converter is found
resolveArgumentback to summary
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception

Implements org.springframework.web.method.support.HandlerMethodArgumentResolver.resolveArgument.

Throws MethodArgumentNotValidException if validation fails.

Parameters
parameter:MethodParameter

Doc from org.springframework.web.method.support.HandlerMethodArgumentResolver.resolveArgument.

the method parameter to resolve. This parameter must have previously been passed to supportsParameter which must have returned true.

mavContainer:ModelAndViewContainer

Doc from org.springframework.web.method.support.HandlerMethodArgumentResolver.resolveArgument.

the ModelAndViewContainer for the current request

webRequest:NativeWebRequest

Doc from org.springframework.web.method.support.HandlerMethodArgumentResolver.resolveArgument.

the current request

binderFactory:WebDataBinderFactory

Doc from org.springframework.web.method.support.HandlerMethodArgumentResolver.resolveArgument.

a factory for creating WebDataBinder instances

Returns:Object

Doc from org.springframework.web.method.support.HandlerMethodArgumentResolver.resolveArgument.

the resolved argument value, or null if not resolvable

Annotations
@Override
Exceptions
Exception:

Doc from org.springframework.web.method.support.HandlerMethodArgumentResolver.resolveArgument.

in case of errors with the preparation of argument values

HttpMessageNotReadableException:
if RequestBody#required() is true and there is no body content or if there is no suitable converter to read the content with.
supportsParameterback to summary
public boolean supportsParameter(MethodParameter parameter)

Implements org.springframework.web.method.support.HandlerMethodArgumentResolver.supportsParameter.

Doc from org.springframework.web.method.support.HandlerMethodArgumentResolver.supportsParameter.

Whether the given method parameter is supported by this resolver.

Parameters
parameter:MethodParameter

the method parameter to check

Returns:boolean

true if this resolver supports the supplied parameter; false otherwise

Annotations
@Override
supportsReturnTypeback to summary
public boolean supportsReturnType(MethodParameter returnType)

Implements org.springframework.web.method.support.HandlerMethodReturnValueHandler.supportsReturnType.

Doc from org.springframework.web.method.support.HandlerMethodReturnValueHandler.supportsReturnType.

Whether the given method return type is supported by this handler.

Parameters
returnType:MethodParameter

the method return type to check

Returns:boolean

true if this handler supports the supplied return type; false otherwise

Annotations
@Override