Class AbstractJackson2Decoder

java.lang.Object
org.springframework.http.codec.json.Jackson2CodecSupport
org.springframework.http.codec.json.AbstractJackson2Decoder
All Implemented Interfaces:
Decoder<Object>, HttpMessageDecoder<Object>
Direct Known Subclasses:
Jackson2CborDecoder, Jackson2JsonDecoder, Jackson2SmileDecoder

public abstract class AbstractJackson2Decoder extends Jackson2CodecSupport implements HttpMessageDecoder<Object>
Abstract base class for Jackson 2.x decoding, leveraging non-blocking parsing.
Since:
5.0
Author:
Sebastien Deleuze, Rossen Stoyanchev, Arjen Poutsma
See Also:
  • Constructor Details

  • Method Details

    • setMaxInMemorySize

      public void setMaxInMemorySize(int byteCount)
      Set the max number of bytes that can be buffered by this decoder. This is either the size of the entire input when decoding as a whole, or the size of one top-level JSON object within a JSON stream. When the limit is exceeded, DataBufferLimitException is raised.

      By default this is set to 256K.

      Parameters:
      byteCount - the max number of bytes to buffer, or -1 for unlimited
      Since:
      5.1.11
    • getMaxInMemorySize

      public int getMaxInMemorySize()
      Return the configured byte count limit.
      Since:
      5.1.11
    • canDecode

      public boolean canDecode(ResolvableType elementType, @Nullable MimeType mimeType)
      Description copied from interface: Decoder
      Whether the decoder supports the given target element type and the MIME type of the source stream.
      Specified by:
      canDecode in interface Decoder<Object>
      Parameters:
      elementType - the target element type for the output stream
      mimeType - the mime type associated with the stream to decode (can be null if not specified)
      Returns:
      true if supported, false otherwise
    • decode

      public reactor.core.publisher.Flux<Object> decode(Publisher<DataBuffer> input, ResolvableType elementType, @Nullable MimeType mimeType, @Nullable Map<String,Object> hints)
      Description copied from interface: Decoder
      Decode a DataBuffer input stream into a Flux of T.
      Specified by:
      decode in interface Decoder<Object>
      Parameters:
      input - the DataBuffer input stream to decode
      elementType - the expected type of elements in the output stream; this type must have been previously passed to the Decoder.canDecode(org.springframework.core.ResolvableType, org.springframework.util.MimeType) method and it must have returned true.
      mimeType - the MIME type associated with the input stream (optional)
      hints - additional information about how to do decode
      Returns:
      the output stream with decoded elements
    • processInput

      protected reactor.core.publisher.Flux<DataBuffer> processInput(Publisher<DataBuffer> input, ResolvableType elementType, @Nullable MimeType mimeType, @Nullable Map<String,Object> hints)
      Process the input publisher into a flux. Default implementation returns Flux.from(Publisher), but subclasses can choose to customize this behavior.
      Parameters:
      input - the DataBuffer input stream to process
      elementType - the expected type of elements in the output stream
      mimeType - the MIME type associated with the input stream (optional)
      hints - additional information about how to do encode
      Returns:
      the processed flux
      Since:
      5.1.14
    • decodeToMono

      public reactor.core.publisher.Mono<Object> decodeToMono(Publisher<DataBuffer> input, ResolvableType elementType, @Nullable MimeType mimeType, @Nullable Map<String,Object> hints)
      Description copied from interface: Decoder
      Decode a DataBuffer input stream into a Mono of T.
      Specified by:
      decodeToMono in interface Decoder<Object>
      Parameters:
      input - the DataBuffer input stream to decode
      elementType - the expected type of elements in the output stream; this type must have been previously passed to the Decoder.canDecode(org.springframework.core.ResolvableType, org.springframework.util.MimeType) method and it must have returned true.
      mimeType - the MIME type associated with the input stream (optional)
      hints - additional information about how to do decode
      Returns:
      the output stream with the decoded element
    • decode

      public Object decode(DataBuffer dataBuffer, ResolvableType targetType, @Nullable MimeType mimeType, @Nullable Map<String,Object> hints) throws DecodingException
      Description copied from interface: Decoder
      Decode a data buffer to an Object of type T. This is useful for scenarios, that distinct messages (or events) are decoded and handled individually, in fully aggregated form.
      Specified by:
      decode in interface Decoder<Object>
      Parameters:
      dataBuffer - the DataBuffer to decode
      targetType - the expected output type
      mimeType - the MIME type associated with the data
      hints - additional information about how to do decode
      Returns:
      the decoded value, possibly null
      Throws:
      DecodingException
    • customizeReader

      protected ObjectReader customizeReader(ObjectReader reader, ResolvableType elementType, @Nullable Map<String,Object> hints)
      Subclasses can use this method to customize ObjectReader used for reading values.
      Parameters:
      reader - the reader instance to customize
      elementType - the target type of element values to read to
      hints - a map with serialization hints; the Reactor Context, when available, may be accessed under the key ContextView.class.getName()
      Returns:
      the customized ObjectReader to use
      Since:
      6.0
    • getDecodeHints

      public Map<String,Object> getDecodeHints(ResolvableType actualType, ResolvableType elementType, ServerHttpRequest request, ServerHttpResponse response)
      Description copied from interface: HttpMessageDecoder
      Get decoding hints based on the server request or annotations on the target controller method parameter.
      Specified by:
      getDecodeHints in interface HttpMessageDecoder<Object>
      Parameters:
      actualType - the actual target type to decode to, possibly a reactive wrapper and sourced from MethodParameter, i.e. providing access to method parameter annotations
      elementType - the element type within Flux/Mono that we're trying to decode to
      request - the current request
      response - the current response
      Returns:
      a Map with hints, possibly empty
    • getDecodableMimeTypes

      public List<MimeType> getDecodableMimeTypes()
      Description copied from interface: Decoder
      Return the list of MIME types supported by this Decoder. The list may not apply to every possible target element type and calls to this method should typically be guarded via canDecode(elementType, null). The list may also exclude MIME types supported only for a specific element type. Alternatively, use Decoder.getDecodableMimeTypes(ResolvableType) for a more precise list.
      Specified by:
      getDecodableMimeTypes in interface Decoder<Object>
      Returns:
      the list of supported MIME types
    • getDecodableMimeTypes

      public List<MimeType> getDecodableMimeTypes(ResolvableType targetType)
      Description copied from interface: Decoder
      Return the list of MIME types supported by this Decoder for the given type of element. This list may differ from Decoder.getDecodableMimeTypes() if the Decoder doesn't support the given element type or if it supports it only for a subset of MIME types.
      Specified by:
      getDecodableMimeTypes in interface Decoder<Object>
      Parameters:
      targetType - the type of element to check for decoding
      Returns:
      the list of MIME types supported for the given target type
    • getAnnotation

      @Nullable protected <A extends Annotation> A getAnnotation(MethodParameter parameter, Class<A> annotType)
      Specified by:
      getAnnotation in class Jackson2CodecSupport