Class AbstractJackson2Decoder

java.lang.Object
org.springframework.http.codec.json.Jackson2CodecSupport
org.springframework.http.codec.json.AbstractJackson2Decoder
All Implemented Interfaces:
org.springframework.core.codec.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

    • AbstractJackson2Decoder

      protected AbstractJackson2Decoder(ObjectMapper mapper, org.springframework.util.MimeType... mimeTypes)
      Constructor with a Jackson ObjectMapper to use.
  • 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(org.springframework.core.ResolvableType elementType, @Nullable org.springframework.util.MimeType mimeType)
      Specified by:
      canDecode in interface org.springframework.core.codec.Decoder<Object>
    • decode

      public reactor.core.publisher.Flux<Object> decode(Publisher<org.springframework.core.io.buffer.DataBuffer> input, org.springframework.core.ResolvableType elementType, @Nullable org.springframework.util.MimeType mimeType, @Nullable Map<String,Object> hints)
      Specified by:
      decode in interface org.springframework.core.codec.Decoder<Object>
    • processInput

      protected reactor.core.publisher.Flux<org.springframework.core.io.buffer.DataBuffer> processInput(Publisher<org.springframework.core.io.buffer.DataBuffer> input, org.springframework.core.ResolvableType elementType, @Nullable org.springframework.util.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<org.springframework.core.io.buffer.DataBuffer> input, org.springframework.core.ResolvableType elementType, @Nullable org.springframework.util.MimeType mimeType, @Nullable Map<String,Object> hints)
      Specified by:
      decodeToMono in interface org.springframework.core.codec.Decoder<Object>
    • decode

      public Object decode(org.springframework.core.io.buffer.DataBuffer dataBuffer, org.springframework.core.ResolvableType targetType, @Nullable org.springframework.util.MimeType mimeType, @Nullable Map<String,Object> hints) throws org.springframework.core.codec.DecodingException
      Specified by:
      decode in interface org.springframework.core.codec.Decoder<Object>
      Throws:
      org.springframework.core.codec.DecodingException
    • customizeReader

      protected ObjectReader customizeReader(ObjectReader reader, org.springframework.core.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(org.springframework.core.ResolvableType actualType, org.springframework.core.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<org.springframework.util.MimeType> getDecodableMimeTypes()
      Specified by:
      getDecodableMimeTypes in interface org.springframework.core.codec.Decoder<Object>
    • getDecodableMimeTypes

      public List<org.springframework.util.MimeType> getDecodableMimeTypes(org.springframework.core.ResolvableType targetType)
      Specified by:
      getDecodableMimeTypes in interface org.springframework.core.codec.Decoder<Object>
    • getAnnotation

      protected <A extends Annotation> A getAnnotation(org.springframework.core.MethodParameter parameter, Class<A> annotType)
      Specified by:
      getAnnotation in class Jackson2CodecSupport