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

## Interface RequestBodyAdvice

- All Known Implementing Classes:
    JsonViewRequestBodyAdvice, RequestBodyAdviceAdapter

      public interface RequestBodyAdvice

  Allows customizing the request before its body is read and converted into an Object and also allows for processing of the resulting Object before it is passed into a controller method as an `@RequestBody` or an `HttpEntity` method argument.

  Implementations of this contract may be registered directly with the `RequestMappingHandlerAdapter` or more likely annotated with `@ControllerAdvice` in which case they are auto-detected.

  Since:
    4.2
  Author:
    Rossen Stoyanchev

- - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method and Description
    --- | ---
    `Object` | `afterBodyRead(Object body, HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType)` Invoked third (and last) after the request body is converted to an Object.
    `HttpInputMessage` | `beforeBodyRead(HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType)` Invoked second before the request body is read and converted.
    `Object` | `handleEmptyBody(Object body, HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType)` Invoked second (and last) if the body is empty.
    `boolean` | `supports(MethodParameter methodParameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType)` Invoked first to determine if this interceptor applies.

- - ### Method Detail

    - #### supports

          boolean supports(MethodParameter methodParameter,
                           Type targetType,
                           Class<? extends HttpMessageConverter<?>> converterType)

      Invoked first to determine if this interceptor applies.
      Parameters:
        `methodParameter` - the method parameter
        `targetType` - the target type, not necessarily the same as the method parameter type, e.g. for `HttpEntity<String>`.
        `converterType` - the selected converter type
      Returns:
        whether this interceptor should be invoked or not

    - #### beforeBodyRead

          HttpInputMessage beforeBodyRead(HttpInputMessage inputMessage,
                                          MethodParameter parameter,
                                          Type targetType,
                                          Class<? extends HttpMessageConverter<?>> converterType)
                                   throws IOException

      Invoked second before the request body is read and converted.
      Parameters:
        `inputMessage` - the request
        `parameter` - the target method parameter
        `targetType` - the target type, not necessarily the same as the method parameter type, e.g. for `HttpEntity<String>`.
        `converterType` - the converter used to deserialize the body
      Returns:
        the input request or a new instance (never `null`)
      Throws:
        `IOException`

    - #### afterBodyRead

          Object afterBodyRead(Object body,
                               HttpInputMessage inputMessage,
                               MethodParameter parameter,
                               Type targetType,
                               Class<? extends HttpMessageConverter<?>> converterType)

      Invoked third (and last) after the request body is converted to an Object.
      Parameters:
        `body` - set to the converter Object before the first advice is called
        `inputMessage` - the request
        `parameter` - the target method parameter
        `targetType` - the target type, not necessarily the same as the method parameter type, e.g. for `HttpEntity<String>`.
        `converterType` - the converter used to deserialize the body
      Returns:
        the same body or a new instance

    - #### handleEmptyBody

          @Nullable
          Object handleEmptyBody(@Nullable
                                           Object body,
                                           HttpInputMessage inputMessage,
                                           MethodParameter parameter,
                                           Type targetType,
                                           Class<? extends HttpMessageConverter<?>> converterType)

      Invoked second (and last) if the body is empty.
      Parameters:
        `body` - usually set to `null` before the first advice is called
        `inputMessage` - the request
        `parameter` - the method parameter
        `targetType` - the target type, not necessarily the same as the method parameter type, e.g. for `HttpEntity<String>`.
        `converterType` - the selected converter type
      Returns:
        the value to use, or `null` which may then raise an `HttpMessageNotReadableException` if the argument is required