org.springframework.http.codec

## Class DecoderHttpMessageReader<T>

- java.lang.Object
- - org.springframework.http.codec.DecoderHttpMessageReader<T>

- Type Parameters:
    `T` - the type of objects in the decoded output stream
  All Implemented Interfaces:
    HttpMessageReader<T>
  Direct Known Subclasses:
    ResourceHttpMessageReader

      public class DecoderHttpMessageReader<T>
      extends Object
      implements HttpMessageReader<T>

  `HttpMessageReader` that wraps and delegates to a `Decoder`.

  Also a `HttpMessageReader` that pre-resolves decoding hints from the extra information available on the server side such as the request or controller method parameter annotations.

  Since:
    5.0
  Author:
    Arjen Poutsma, Sebastien Deleuze, Rossen Stoyanchev

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `DecoderHttpMessageReader(Decoder<T> decoder)` Create an instance wrapping the given `Decoder`.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `boolean` | `canRead(ResolvableType elementType, MediaType mediaType)` Whether the given object type is supported by this reader.
    `protected MediaType` | `getContentType(HttpMessage inputMessage)` Determine the Content-Type of the HTTP message based on the "Content-Type" header or otherwise default to `MediaType.APPLICATION_OCTET_STREAM`.
    `Decoder<T>` | `getDecoder()` Return the `Decoder` of this reader.
    `List<MediaType>` | `getReadableMediaTypes()` Return the list of media types supported by this reader.
    `List<MediaType>` | `getReadableMediaTypes(ResolvableType elementType)` Return the list of media types supported by this Reader for the given type of element.
    `protected Map<String,Object>` | `getReadHints(ResolvableType elementType, ReactiveHttpInputMessage message)` Get additional hints for decoding based on the input HTTP message.
    `protected Map<String,Object>` | `getReadHints(ResolvableType actualType, ResolvableType elementType, ServerHttpRequest request, ServerHttpResponse response)` Get additional hints for decoding for example based on the server request or annotations from controller method parameters.
    `reactor.core.publisher.Flux<T>` | `read(ResolvableType elementType, ReactiveHttpInputMessage message, Map<String,Object> hints)` Read from the input message and decode to a stream of objects.
    `reactor.core.publisher.Flux<T>` | `read(ResolvableType actualType, ResolvableType elementType, ServerHttpRequest request, ServerHttpResponse response, Map<String,Object> hints)` Server-side only alternative to `HttpMessageReader.read(ResolvableType, ReactiveHttpInputMessage, Map)` with additional context available.
    `reactor.core.publisher.Mono<T>` | `readMono(ResolvableType elementType, ReactiveHttpInputMessage message, Map<String,Object> hints)` Read from the input message and decode to a single object.
    `reactor.core.publisher.Mono<T>` | `readMono(ResolvableType actualType, ResolvableType elementType, ServerHttpRequest request, ServerHttpResponse response, Map<String,Object> hints)` Server-side only alternative to `HttpMessageReader.readMono(ResolvableType, ReactiveHttpInputMessage, Map)` with additional, context available.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### DecoderHttpMessageReader

          public DecoderHttpMessageReader(Decoder<T> decoder)

      Create an instance wrapping the given `Decoder`.

  - ### Method Detail

    - #### getDecoder

          public Decoder<T> getDecoder()

      Return the `Decoder` of this reader.

    - #### getReadableMediaTypes

          public List<MediaType> getReadableMediaTypes()

      Description copied from interface: `HttpMessageReader`
      Return the list of media types supported by this reader. The list may not apply to every possible target element type and calls to this method should typically be guarded via `canWrite(elementType, null)`. The list may also exclude media types supported only for a specific element type. Alternatively, use `HttpMessageReader.getReadableMediaTypes(ResolvableType)` for a more precise list.
      Specified by:
        `getReadableMediaTypes` in interface `HttpMessageReader<T>`
      Returns:
        the general list of supported media types

    - #### getReadableMediaTypes

          public List<MediaType> getReadableMediaTypes(ResolvableType elementType)

      Description copied from interface: `HttpMessageReader`
      Return the list of media types supported by this Reader for the given type of element. This list may differ from `HttpMessageReader.getReadableMediaTypes()` if the Reader doesn't support the element type, or if it supports it only for a subset of media types.
      Specified by:
        `getReadableMediaTypes` in interface `HttpMessageReader<T>`
      Parameters:
        `elementType` - the type of element to read
      Returns:
        the list of media types supported for the given class

    - #### canRead

          public boolean canRead(ResolvableType elementType,
                                 @Nullable
                                 MediaType mediaType)

      Description copied from interface: `HttpMessageReader`
      Whether the given object type is supported by this reader.
      Specified by:
        `canRead` in interface `HttpMessageReader<T>`
      Parameters:
        `elementType` - the type of object to check
        `mediaType` - the media type for the read (possibly `null`)
      Returns:
        `true` if readable, `false` otherwise

    - #### read

          public reactor.core.publisher.Flux<T> read(ResolvableType elementType,
                                                     ReactiveHttpInputMessage message,
                                                     Map<String,Object> hints)

      Description copied from interface: `HttpMessageReader`
      Read from the input message and decode to a stream of objects.
      Specified by:
        `read` in interface `HttpMessageReader<T>`
      Parameters:
        `elementType` - the type of objects in the stream which must have been previously checked via `HttpMessageReader.canRead(ResolvableType, MediaType)`
        `message` - the message to read from
        `hints` - additional information about how to read and decode the input
      Returns:
        the decoded stream of elements

    - #### readMono

          public reactor.core.publisher.Mono<T> readMono(ResolvableType elementType,
                                                         ReactiveHttpInputMessage message,
                                                         Map<String,Object> hints)

      Description copied from interface: `HttpMessageReader`
      Read from the input message and decode to a single object.
      Specified by:
        `readMono` in interface `HttpMessageReader<T>`
      Parameters:
        `elementType` - the type of objects in the stream which must have been previously checked via `HttpMessageReader.canRead(ResolvableType, MediaType)`
        `message` - the message to read from
        `hints` - additional information about how to read and decode the input
      Returns:
        the decoded object

    - #### getContentType

          @Nullable
          protected MediaType getContentType(HttpMessage inputMessage)

      Determine the Content-Type of the HTTP message based on the "Content-Type" header or otherwise default to `MediaType.APPLICATION_OCTET_STREAM`.
      Parameters:
        `inputMessage` - the HTTP message
      Returns:
        the MediaType, possibly `null`.

    - #### getReadHints

          protected Map<String,Object> getReadHints(ResolvableType elementType,
                                                    ReactiveHttpInputMessage message)

      Get additional hints for decoding based on the input HTTP message.
      Since:
        5.3

    - #### read

          public reactor.core.publisher.Flux<T> read(ResolvableType actualType,
                                                     ResolvableType elementType,
                                                     ServerHttpRequest request,
                                                     ServerHttpResponse response,
                                                     Map<String,Object> hints)

      Description copied from interface: `HttpMessageReader`
      Server-side only alternative to `HttpMessageReader.read(ResolvableType, ReactiveHttpInputMessage, Map)` with additional context available.
      Specified by:
        `read` in interface `HttpMessageReader<T>`
      Parameters:
        `actualType` - the actual type of the target method parameter; for annotated controllers, the `MethodParameter` can be accessed via `ResolvableType.getSource()`.
        `elementType` - the type of Objects in the output stream
        `request` - the current request
        `response` - the current response
        `hints` - additional information about how to read the body
      Returns:
        the decoded stream of elements

    - #### readMono

          public reactor.core.publisher.Mono<T> readMono(ResolvableType actualType,
                                                         ResolvableType elementType,
                                                         ServerHttpRequest request,
                                                         ServerHttpResponse response,
                                                         Map<String,Object> hints)

      Description copied from interface: `HttpMessageReader`
      Server-side only alternative to `HttpMessageReader.readMono(ResolvableType, ReactiveHttpInputMessage, Map)` with additional, context available.
      Specified by:
        `readMono` in interface `HttpMessageReader<T>`
      Parameters:
        `actualType` - the actual type of the target method parameter; for annotated controllers, the `MethodParameter` can be accessed via `ResolvableType.getSource()`.
        `elementType` - the type of Objects in the output stream
        `request` - the current request
        `response` - the current response
        `hints` - additional information about how to read the body
      Returns:
        the decoded stream of elements

    - #### getReadHints

          protected Map<String,Object> getReadHints(ResolvableType actualType,
                                                    ResolvableType elementType,
                                                    ServerHttpRequest request,
                                                    ServerHttpResponse response)

      Get additional hints for decoding for example based on the server request or annotations from controller method parameters. By default, delegate to the decoder if it is an instance of `HttpMessageDecoder`.