Class JsonSerializer<T>

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

    public class JsonSerializer<T>
    extends java.lang.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
    • Field Detail

      • ADD_TYPE_INFO_HEADERS

        public static final java.lang.String ADD_TYPE_INFO_HEADERS
        Kafka config property for disabling adding type headers.
        See Also:
        Constant Field Values
      • TYPE_MAPPINGS

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

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

        protected boolean addTypeInfo
    • Constructor Detail

      • 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 Detail

      • 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
      • 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​(java.util.Map<java.lang.String,​?> configs,
                              boolean isKey)
        Specified by:
        configure in interface org.apache.kafka.common.serialization.Serializer<T>
      • createMappings

        protected static java.util.Map<java.lang.String,​java.lang.Class<?>> createMappings​(java.lang.String mappings)
      • serialize

        @Nullable
        public byte[] serialize​(java.lang.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​(java.lang.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 java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Specified by:
        close in interface org.apache.kafka.common.serialization.Serializer<T>
      • copyWithType

        public <X> JsonSerializer<X> copyWithType​(java.lang.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:
        setUseTypeMapperForKey(boolean)