Class AbstractJacksonEncoder<T extends tools.jackson.databind.ObjectMapper>

java.lang.Object
org.springframework.http.codec.JacksonCodecSupport<T>
org.springframework.http.codec.AbstractJacksonEncoder<T>
Type Parameters:
T - the type of ObjectMapper
All Implemented Interfaces:
org.springframework.core.codec.Encoder<Object>, HttpMessageEncoder<Object>
Direct Known Subclasses:
JacksonCborEncoder, JacksonJsonEncoder, JacksonSmileEncoder

public abstract class AbstractJacksonEncoder<T extends tools.jackson.databind.ObjectMapper> extends JacksonCodecSupport<T> implements HttpMessageEncoder<Object>
Base class providing support methods for Jackson 3.x encoding. For non-streaming use cases, Flux elements are collected into a List before serialization for performance reasons.
Since:
7.0
Author:
Sebastien Deleuze
  • Constructor Details

    • AbstractJacksonEncoder

      protected AbstractJacksonEncoder(tools.jackson.databind.cfg.MapperBuilder<T,?> builder, org.springframework.util.MimeType... mimeTypes)
      Construct a new instance with the provided builder customized with the JacksonModules found by MapperBuilder.findModules(ClassLoader) and MimeTypes.
    • AbstractJacksonEncoder

      protected AbstractJacksonEncoder(T mapper, org.springframework.util.MimeType... mimeTypes)
      Construct a new instance with the provided ObjectMapper and MimeTypes.
  • Method Details

    • setStreamingMediaTypes

      public void setStreamingMediaTypes(List<MediaType> mediaTypes)
      Configure "streaming" media types for which flushing should be performed automatically vs at the end of the stream.
    • canEncode

      public boolean canEncode(org.springframework.core.ResolvableType elementType, @Nullable org.springframework.util.MimeType mimeType)
      Specified by:
      canEncode in interface org.springframework.core.codec.Encoder<T extends tools.jackson.databind.ObjectMapper>
    • encode

      public reactor.core.publisher.Flux<org.springframework.core.io.buffer.DataBuffer> encode(Publisher<?> inputStream, org.springframework.core.io.buffer.DataBufferFactory bufferFactory, org.springframework.core.ResolvableType elementType, @Nullable org.springframework.util.MimeType mimeType, @Nullable Map<String,Object> hints)
      Specified by:
      encode in interface org.springframework.core.codec.Encoder<T extends tools.jackson.databind.ObjectMapper>
    • encodeValue

      public org.springframework.core.io.buffer.DataBuffer encodeValue(Object value, org.springframework.core.io.buffer.DataBufferFactory bufferFactory, org.springframework.core.ResolvableType valueType, @Nullable org.springframework.util.MimeType mimeType, @Nullable Map<String,Object> hints)
      Specified by:
      encodeValue in interface org.springframework.core.codec.Encoder<T extends tools.jackson.databind.ObjectMapper>
    • customizeWriter

      protected tools.jackson.databind.ObjectWriter customizeWriter(tools.jackson.databind.ObjectWriter writer, @Nullable org.springframework.util.MimeType mimeType, org.springframework.core.ResolvableType elementType, @Nullable Map<String,Object> hints)
      Subclasses can use this method to customize the ObjectWriter used for writing values.
      Parameters:
      writer - the writer instance to customize
      mimeType - the selected MIME type
      elementType - the type of element values to write
      hints - a map with serialization hints; the Reactor Context, when available, may be accessed under the key ContextView.class.getName()
      Returns:
      the customized ObjectWriter to use
    • getStreamingMediaTypeSeparator

      protected byte @Nullable [] getStreamingMediaTypeSeparator(@Nullable org.springframework.util.MimeType mimeType)
      Return the separator to use for the given mime type.

      By default, this method returns new line "\n" if the given mime type is one of the configured streaming mime types.

    • getJsonEncoding

      protected tools.jackson.core.JsonEncoding getJsonEncoding(@Nullable org.springframework.util.MimeType mimeType)
      Determine the JSON encoding to use for the given mime type.
      Parameters:
      mimeType - the mime type as requested by the caller
      Returns:
      the JSON encoding to use (never null)
    • getEncodableMimeTypes

      public List<org.springframework.util.MimeType> getEncodableMimeTypes()
      Specified by:
      getEncodableMimeTypes in interface org.springframework.core.codec.Encoder<T extends tools.jackson.databind.ObjectMapper>
    • getEncodableMimeTypes

      public List<org.springframework.util.MimeType> getEncodableMimeTypes(org.springframework.core.ResolvableType elementType)
      Specified by:
      getEncodableMimeTypes in interface org.springframework.core.codec.Encoder<T extends tools.jackson.databind.ObjectMapper>
    • getStreamingMediaTypes

      public List<MediaType> getStreamingMediaTypes()
      Description copied from interface: HttpMessageEncoder
      Return "streaming" media types for which flushing should be performed automatically vs at the end of the input stream.
      Specified by:
      getStreamingMediaTypes in interface HttpMessageEncoder<T extends tools.jackson.databind.ObjectMapper>
    • getEncodeHints

      public Map<String,Object> getEncodeHints(@Nullable org.springframework.core.ResolvableType actualType, org.springframework.core.ResolvableType elementType, @Nullable MediaType mediaType, ServerHttpRequest request, ServerHttpResponse response)
      Description copied from interface: HttpMessageEncoder
      Get decoding hints based on the server request or annotations on the target controller method parameter.
      Specified by:
      getEncodeHints in interface HttpMessageEncoder<T extends tools.jackson.databind.ObjectMapper>
      Parameters:
      actualType - the actual source type to encode, possibly a reactive wrapper and sourced from MethodParameter, i.e. providing access to method annotations.
      elementType - the element type within Flux/Mono that we're trying to encode.
      request - the current request
      response - the current response
      Returns:
      a Map with hints, possibly empty
    • getAnnotation

      protected <A extends Annotation> @Nullable A getAnnotation(org.springframework.core.MethodParameter parameter, Class<A> annotType)
      Specified by:
      getAnnotation in class JacksonCodecSupport<T extends tools.jackson.databind.ObjectMapper>