Class JsonSerializer<T>

java.lang.Object
org.springframework.kafka.support.serializer.JsonSerializer<T>
Type Parameters:
T - class of the entity, representing messages
All Implemented Interfaces:
Closeable, AutoCloseable, org.apache.kafka.common.serialization.Serializer<T>

public class JsonSerializer<T> extends Object implements org.apache.kafka.common.serialization.Serializer<T>
Generic Serializer for sending Java objects to Kafka as JSON.

IMPORTANT: Configuration must be done completely with property setters or via configure(Map, boolean), not a mixture. If any setters have been called, configure(Map, boolean) will be a no-op.

Author:
Igor Stepanov, Artem Bilan, Gary Russell, Elliot Kennedy, Wang Zhiyang, Omer Celik
  • Field Details

    • ADD_TYPE_INFO_HEADERS

      public static final String ADD_TYPE_INFO_HEADERS
      Kafka config property for disabling adding type headers.
      See Also:
    • TYPE_MAPPINGS

      public static final String TYPE_MAPPINGS
      Kafka config property to add type mappings to the type mapper: 'foo:com.Foo,bar:com.Bar'.
      See Also:
    • objectMapper

      protected final com.fasterxml.jackson.databind.ObjectMapper objectMapper
    • addTypeInfo

      protected boolean addTypeInfo
    • typeMapper

      protected Jackson2JavaTypeMapper typeMapper
  • Constructor Details

    • JsonSerializer

      public JsonSerializer()
    • JsonSerializer

      public JsonSerializer(com.fasterxml.jackson.core.type.TypeReference<? super T> targetType)
    • JsonSerializer

      public JsonSerializer(com.fasterxml.jackson.databind.ObjectMapper objectMapper)
    • JsonSerializer

      public JsonSerializer(com.fasterxml.jackson.core.type.TypeReference<? super T> targetType, com.fasterxml.jackson.databind.ObjectMapper objectMapper)
    • JsonSerializer

      public JsonSerializer(com.fasterxml.jackson.databind.JavaType targetType, com.fasterxml.jackson.databind.ObjectMapper objectMapper)
  • Method Details

    • isAddTypeInfo

      public boolean isAddTypeInfo()
    • setAddTypeInfo

      public void setAddTypeInfo(boolean addTypeInfo)
      Set to false to disable adding type info headers.
      Parameters:
      addTypeInfo - true to add headers.
      Since:
      2.1
    • getTypeMapper

      public Jackson2JavaTypeMapper getTypeMapper()
    • setTypeMapper

      public void setTypeMapper(Jackson2JavaTypeMapper typeMapper)
      Set a customized type mapper.
      Parameters:
      typeMapper - the type mapper.
      Since:
      2.1
    • setUseTypeMapperForKey

      public void setUseTypeMapperForKey(boolean isKey)
      Configure the default Jackson2JavaTypeMapper to use key type headers.
      Parameters:
      isKey - Use key type headers if true
      Since:
      2.1.3
    • configure

      public void configure(Map<String,?> configs, boolean isKey)
      Specified by:
      configure in interface org.apache.kafka.common.serialization.Serializer<T>
    • createMappings

      protected static Map<String,Class<?>> createMappings(String mappings)
    • serialize

      @Nullable public byte[] serialize(String topic, org.apache.kafka.common.header.Headers headers, @Nullable T data)
      Specified by:
      serialize in interface org.apache.kafka.common.serialization.Serializer<T>
    • serialize

      @Nullable public byte[] serialize(String topic, @Nullable T data)
      Specified by:
      serialize in interface org.apache.kafka.common.serialization.Serializer<T>
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Specified by:
      close in interface org.apache.kafka.common.serialization.Serializer<T>
    • copyWithType

      public <X> JsonSerializer<X> copyWithType(Class<? super X> newTargetType)
      Copies this serializer with same configuration, except new target type reference is used.
      Type Parameters:
      X - new serialization source type
      Parameters:
      newTargetType - type reference forced for serialization, not null
      Returns:
      new instance of serializer with type changes
      Since:
      2.6
    • copyWithType

      public <X> JsonSerializer<X> copyWithType(com.fasterxml.jackson.core.type.TypeReference<? super X> newTargetType)
      Copies this serializer with same configuration, except new target type reference is used.
      Type Parameters:
      X - new serialization source type
      Parameters:
      newTargetType - type reference forced for serialization, not null
      Returns:
      new instance of serializer with type changes
      Since:
      2.6
    • copyWithType

      public <X> JsonSerializer<X> copyWithType(com.fasterxml.jackson.databind.JavaType newTargetType)
      Copies this serializer with same configuration, except new target java type is used.
      Type Parameters:
      X - new serialization source type
      Parameters:
      newTargetType - java type forced for serialization, not null
      Returns:
      new instance of serializer with type changes
      Since:
      2.6
    • forKeys

      public JsonSerializer<T> forKeys()
      Designate this serializer for serializing keys (default is values); only applies if the default type mapper is used.
      Returns:
      the serializer.
      Since:
      2.3
      See Also:
    • noTypeInfo

      public JsonSerializer<T> noTypeInfo()
      Do not include type info headers.
      Returns:
      the serializer.
      Since:
      2.3
      See Also:
    • typeMapper

      public JsonSerializer<T> typeMapper(Jackson2JavaTypeMapper mapper)
      Use the supplied Jackson2JavaTypeMapper.
      Parameters:
      mapper - the mapper.
      Returns:
      the serializer.
      Since:
      2.3
      See Also: