Class JacksonJsonDeserializer<T>
java.lang.Object
org.springframework.kafka.support.serializer.JacksonJsonDeserializer<T>
- Type Parameters:
T
- class of the entity, representing messages
- All Implemented Interfaces:
Closeable
,AutoCloseable
,org.apache.kafka.common.serialization.Deserializer<T>
public class JacksonJsonDeserializer<T>
extends Object
implements org.apache.kafka.common.serialization.Deserializer<T>
Generic
Deserializer
for
receiving JSON from Kafka and return Java objects. Based on Jackson 3.
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.
- Since:
- 4.0
- Author:
- Igor Stepanov, Artem Bilan, Gary Russell, Yanming Zhou, Elliot Kennedy, Torsten Schleede, Ivan Ponomarev, Omer Celik, Soby Chacko
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final tools.jackson.databind.json.JsonMapper
static final String
Kafka config property for the default key type if no header.static final String
A method name to determine theJavaType
to deserialize the key to: 'com.Foo.deserialize'.static final String
Kafka config property for removing type headers (default true).protected @Nullable tools.jackson.databind.JavaType
static final String
Kafka config property for trusted deserialization packages.static final String
Kafka config property to add type mappings to the type mapper: 'foo=com.Foo,bar=com.Bar'.protected JacksonJavaTypeMapper
static final String
Kafka config property for using type headers (default true).static final String
Kafka config property for the default value type if no header.static final String
A method name to determine theJavaType
to deserialize the value to: 'com.Foo.deserialize'. -
Constructor Summary
ConstructorsConstructorDescriptionConstruct an instance with a defaultJsonMapper
.JacksonJsonDeserializer
(@Nullable Class<? super T> targetType) Construct an instance with the provided target type, and a defaultJsonMapper
.JacksonJsonDeserializer
(@Nullable Class<? super T> targetType, boolean useHeadersIfPresent) Construct an instance with the provided target type, and useHeadersIfPresent with a defaultJsonMapper
.JacksonJsonDeserializer
(@Nullable Class<? super T> targetType, tools.jackson.databind.json.JsonMapper jsonMapper, boolean useHeadersIfPresent) Construct an instance with the provided target type,JsonMapper
and useHeadersIfPresent.JacksonJsonDeserializer
(Class<? super T> targetType, tools.jackson.databind.json.JsonMapper jsonMapper) Construct an instance with the provided target type, andJsonMapper
.JacksonJsonDeserializer
(@Nullable tools.jackson.core.type.TypeReference<? super T> targetType) Construct an instance with the provided target type, and a defaultJsonMapper
.JacksonJsonDeserializer
(@Nullable tools.jackson.core.type.TypeReference<? super T> targetType, boolean useHeadersIfPresent) Construct an instance with the provided target type, and useHeadersIfPresent with a defaultJsonMapper
.JacksonJsonDeserializer
(@Nullable tools.jackson.core.type.TypeReference<? super T> targetType, tools.jackson.databind.json.JsonMapper jsonMapper, boolean useHeadersIfPresent) Construct an instance with the provided target type,JsonMapper
and useHeadersIfPresent.JacksonJsonDeserializer
(tools.jackson.core.type.TypeReference<? super T> targetType, tools.jackson.databind.json.JsonMapper jsonMapper) Construct an instance with the provided target type, andJsonMapper
.JacksonJsonDeserializer
(@Nullable tools.jackson.databind.JavaType targetType) Construct an instance with the provided target type, and a defaultJsonMapper
.JacksonJsonDeserializer
(@Nullable tools.jackson.databind.JavaType targetType, boolean useHeadersIfPresent) Construct an instance with the provided target type, and useHeadersIfPresent with a defaultJsonMapper
.JacksonJsonDeserializer
(@Nullable tools.jackson.databind.JavaType targetType, tools.jackson.databind.json.JsonMapper jsonMapper) Construct an instance with the provided target type, andJsonMapper
.JacksonJsonDeserializer
(@Nullable tools.jackson.databind.JavaType targetType, tools.jackson.databind.json.JsonMapper jsonMapper, boolean useHeadersIfPresent) Construct an instance with the provided target type,JsonMapper
and useHeadersIfPresent.JacksonJsonDeserializer
(tools.jackson.databind.json.JsonMapper jsonMapper) Construct an instance with the providedJsonMapper
. -
Method Summary
Modifier and TypeMethodDescriptionvoid
addTrustedPackages
(String... packages) Add trusted packages for deserialization.void
close()
void
<X> JacksonJsonDeserializer
<X> copyWithType
(Class<? super X> newTargetType) Copies this deserializer with same configuration, except new target type is used.<X> JacksonJsonDeserializer
<X> copyWithType
(tools.jackson.core.type.TypeReference<? super X> newTargetType) Copies this deserializer with same configuration, except new target type reference is used.<X> JacksonJsonDeserializer
<X> copyWithType
(tools.jackson.databind.JavaType newTargetType) Copies this deserializer with same configuration, except new target java type is used.@Nullable T
deserialize
(String topic, byte[] data) @Nullable T
deserialize
(String topic, org.apache.kafka.common.header.Headers headers, byte[] data) Don't remove type information headers.forKeys()
Designate this deserializer for deserializing keys (default is values); only applies if the default type mapper is used.Ignore type information headers and use the configured target class.void
setRemoveTypeHeaders
(boolean removeTypeHeaders) Set to false to retain type information headers after deserialization.void
setTypeFunction
(BiFunction<byte[], org.apache.kafka.common.header.Headers, tools.jackson.databind.JavaType> typeFunction) Set aBiFunction
that receives the data to be deserialized and the headers and returns a JavaType.void
setTypeMapper
(JacksonJavaTypeMapper typeMapper) Set a customized type mapper.void
setTypeResolver
(JacksonJsonTypeResolver typeResolver) Set aJacksonJsonTypeResolver
that receives the data to be deserialized and the headers and returns a JavaType.void
setUseTypeHeaders
(boolean useTypeHeaders) Set to false to ignore type information in headers and use the configured target type instead.void
setUseTypeMapperForKey
(boolean isKey) Configure the default JacksonJavaTypeMapper to use key type headers.trustedPackages
(String... packages) Add trusted packages to the default type mapper.typeFunction
(BiFunction<byte[], org.apache.kafka.common.header.Headers, tools.jackson.databind.JavaType> typeFunction) Set aBiFunction
that receives the data to be deserialized and the headers and returns a JavaType.typeMapper
(JacksonJavaTypeMapper mapper) Use the suppliedJacksonJavaTypeMapper
.typeResolver
(JacksonJsonTypeResolver resolver) Set aJsonTypeResolver
that receives the data to be deserialized and the headers and returns a JavaType.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.apache.kafka.common.serialization.Deserializer
deserialize
-
Field Details
-
KEY_DEFAULT_TYPE
Kafka config property for the default key type if no header.- See Also:
-
VALUE_DEFAULT_TYPE
Kafka config property for the default value type if no header.- See Also:
-
TRUSTED_PACKAGES
Kafka config property for trusted deserialization packages.- See Also:
-
TYPE_MAPPINGS
Kafka config property to add type mappings to the type mapper: 'foo=com.Foo,bar=com.Bar'.- See Also:
-
REMOVE_TYPE_INFO_HEADERS
Kafka config property for removing type headers (default true).- See Also:
-
USE_TYPE_INFO_HEADERS
Kafka config property for using type headers (default true).- Since:
- 2.2.3
- See Also:
-
KEY_TYPE_METHOD
A method name to determine theJavaType
to deserialize the key to: 'com.Foo.deserialize'. SeeJacksonJsonTypeResolver.resolveType(java.lang.String, byte[], org.apache.kafka.common.header.Headers)
for the signature.- See Also:
-
VALUE_TYPE_METHOD
A method name to determine theJavaType
to deserialize the value to: 'com.Foo.deserialize'. SeeJacksonJsonTypeResolver.resolveType(java.lang.String, byte[], org.apache.kafka.common.header.Headers)
for the signature.- See Also:
-
jsonMapper
protected final tools.jackson.databind.json.JsonMapper jsonMapper -
targetType
protected @Nullable tools.jackson.databind.JavaType targetType -
typeMapper
-
-
Constructor Details
-
JacksonJsonDeserializer
public JacksonJsonDeserializer()Construct an instance with a defaultJsonMapper
. -
JacksonJsonDeserializer
public JacksonJsonDeserializer(tools.jackson.databind.json.JsonMapper jsonMapper) Construct an instance with the providedJsonMapper
.- Parameters:
jsonMapper
- a custom object mapper.
-
JacksonJsonDeserializer
-
JacksonJsonDeserializer
public JacksonJsonDeserializer(@Nullable tools.jackson.core.type.TypeReference<? super T> targetType) Construct an instance with the provided target type, and a defaultJsonMapper
.- Parameters:
targetType
- the target type reference to use if no type info headers are present.
-
JacksonJsonDeserializer
public JacksonJsonDeserializer(@Nullable tools.jackson.databind.JavaType targetType) Construct an instance with the provided target type, and a defaultJsonMapper
.- Parameters:
targetType
- the target java type to use if no type info headers are present.
-
JacksonJsonDeserializer
Construct an instance with the provided target type, and useHeadersIfPresent with a defaultJsonMapper
.- Parameters:
targetType
- the target type.useHeadersIfPresent
- true to use headers if present and fall back to target type if not.
-
JacksonJsonDeserializer
public JacksonJsonDeserializer(@Nullable tools.jackson.core.type.TypeReference<? super T> targetType, boolean useHeadersIfPresent) Construct an instance with the provided target type, and useHeadersIfPresent with a defaultJsonMapper
.- Parameters:
targetType
- the target type reference.useHeadersIfPresent
- true to use headers if present and fall back to target type if not.
-
JacksonJsonDeserializer
public JacksonJsonDeserializer(@Nullable tools.jackson.databind.JavaType targetType, boolean useHeadersIfPresent) Construct an instance with the provided target type, and useHeadersIfPresent with a defaultJsonMapper
.- Parameters:
targetType
- the target java type.useHeadersIfPresent
- true to use headers if present and fall back to target type if not.
-
JacksonJsonDeserializer
public JacksonJsonDeserializer(Class<? super T> targetType, tools.jackson.databind.json.JsonMapper jsonMapper) Construct an instance with the provided target type, andJsonMapper
.- Parameters:
targetType
- the target type to use if no type info headers are present.jsonMapper
- the mapper. type if not.
-
JacksonJsonDeserializer
public JacksonJsonDeserializer(tools.jackson.core.type.TypeReference<? super T> targetType, tools.jackson.databind.json.JsonMapper jsonMapper) Construct an instance with the provided target type, andJsonMapper
.- Parameters:
targetType
- the target type reference to use if no type info headers are present.jsonMapper
- the mapper. type if not.
-
JacksonJsonDeserializer
public JacksonJsonDeserializer(@Nullable tools.jackson.databind.JavaType targetType, tools.jackson.databind.json.JsonMapper jsonMapper) Construct an instance with the provided target type, andJsonMapper
.- Parameters:
targetType
- the target java type to use if no type info headers are present.jsonMapper
- the mapper. type if not.
-
JacksonJsonDeserializer
public JacksonJsonDeserializer(@Nullable Class<? super T> targetType, tools.jackson.databind.json.JsonMapper jsonMapper, boolean useHeadersIfPresent) Construct an instance with the provided target type,JsonMapper
and useHeadersIfPresent.- Parameters:
targetType
- the target type.jsonMapper
- the mapper.useHeadersIfPresent
- true to use headers if present and fall back to target type if not.
-
JacksonJsonDeserializer
public JacksonJsonDeserializer(@Nullable tools.jackson.core.type.TypeReference<? super T> targetType, tools.jackson.databind.json.JsonMapper jsonMapper, boolean useHeadersIfPresent) Construct an instance with the provided target type,JsonMapper
and useHeadersIfPresent.- Parameters:
targetType
- the target type reference.jsonMapper
- the mapper.useHeadersIfPresent
- true to use headers if present and fall back to target type if not.
-
JacksonJsonDeserializer
public JacksonJsonDeserializer(@Nullable tools.jackson.databind.JavaType targetType, tools.jackson.databind.json.JsonMapper jsonMapper, boolean useHeadersIfPresent) Construct an instance with the provided target type,JsonMapper
and useHeadersIfPresent.- Parameters:
targetType
- the target type reference.jsonMapper
- the mapper.useHeadersIfPresent
- true to use headers if present and fall back to target type if not.
-
-
Method Details
-
getTypeMapper
-
setTypeMapper
Set a customized type mapper. If the mapper is aJacksonJavaTypeMapper
, any class mappings configured in the mapper will be added to the trusted packages.- Parameters:
typeMapper
- the type mapper.
-
setUseTypeMapperForKey
public void setUseTypeMapperForKey(boolean isKey) Configure the default JacksonJavaTypeMapper to use key type headers.- Parameters:
isKey
- Use key type headers if true
-
setRemoveTypeHeaders
public void setRemoveTypeHeaders(boolean removeTypeHeaders) Set to false to retain type information headers after deserialization. Default true.- Parameters:
removeTypeHeaders
- true to remove headers.
-
setUseTypeHeaders
public void setUseTypeHeaders(boolean useTypeHeaders) Set to false to ignore type information in headers and use the configured target type instead. Only applies if the preconfigured type mapper is used. Default true.- Parameters:
useTypeHeaders
- false to ignore type headers.
-
setTypeFunction
public void setTypeFunction(BiFunction<byte[], org.apache.kafka.common.header.Headers, tools.jackson.databind.JavaType> typeFunction) Set aBiFunction
that receives the data to be deserialized and the headers and returns a JavaType.- Parameters:
typeFunction
- the function.
-
setTypeResolver
Set aJacksonJsonTypeResolver
that receives the data to be deserialized and the headers and returns a JavaType.- Parameters:
typeResolver
- the resolver.
-
configure
-
addTrustedPackages
Add trusted packages for deserialization.- Parameters:
packages
- the packages.
-
deserialize
-
deserialize
-
close
public void close()- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Specified by:
close
in interfaceorg.apache.kafka.common.serialization.Deserializer<T>
-
copyWithType
Copies this deserializer with same configuration, except new target type is used.- Type Parameters:
X
- new deserialization result type- Parameters:
newTargetType
- type used for when type headers are missing, not null- Returns:
- new instance of deserializer with type changes
-
copyWithType
public <X> JacksonJsonDeserializer<X> copyWithType(tools.jackson.core.type.TypeReference<? super X> newTargetType) Copies this deserializer with same configuration, except new target type reference is used.- Type Parameters:
X
- new deserialization result type- Parameters:
newTargetType
- type reference used for when type headers are missing, not null- Returns:
- new instance of deserializer with type changes
-
copyWithType
Copies this deserializer with same configuration, except new target java type is used.- Type Parameters:
X
- new deserialization result type- Parameters:
newTargetType
- java type used for when type headers are missing, not null- Returns:
- new instance of deserializer with type changes
-
forKeys
Designate this deserializer for deserializing keys (default is values); only applies if the default type mapper is used.- Returns:
- the deserializer.
-
dontRemoveTypeHeaders
Don't remove type information headers.- Returns:
- the deserializer.
- See Also:
-
ignoreTypeHeaders
Ignore type information headers and use the configured target class.- Returns:
- the deserializer.
- See Also:
-
typeMapper
Use the suppliedJacksonJavaTypeMapper
.- Parameters:
mapper
- the mapper.- Returns:
- the deserializer.
- See Also:
-
trustedPackages
Add trusted packages to the default type mapper.- Parameters:
packages
- the packages.- Returns:
- the deserializer.
-
typeFunction
public JacksonJsonDeserializer<T> typeFunction(BiFunction<byte[], org.apache.kafka.common.header.Headers, tools.jackson.databind.JavaType> typeFunction) Set aBiFunction
that receives the data to be deserialized and the headers and returns a JavaType.- Parameters:
typeFunction
- the function.- Returns:
- the deserializer.
-
typeResolver
Set aJsonTypeResolver
that receives the data to be deserialized and the headers and returns a JavaType.- Parameters:
resolver
- the resolver.- Returns:
- the deserializer.
-