- All Implemented Interfaces:
Serializable
,Versioned
JacksonModule
implementation that allows registration
of serializers and deserializers, bean serializer
and deserializer modifiers, registration of subtypes and mix-ins
as well as some other commonly
needed aspects (addition of custom AbstractTypeResolver
s,
ValueInstantiator
s).
NOTE: that [de]serializers are registered as "default" [de]serializers.
As a result, they will have lower priority than the ones indicated through annotations on
both Class and property-associated annotations -- for example,
JsonDeserialize
.
In cases where both module-based [de]serializers and annotation-based [de]serializers are registered,
the [de]serializer specified by the annotation will take precedence.
NOTE: although it is not expected that sub-types should need to
override setupModule(SetupContext)
method, if they choose
to do so they MUST call super.setupModule(context)
to ensure that registration works as expected.
WARNING: when registering ValueSerializer
s and ValueDeserializer
s,
only type erased Class
is compared: this means that usually you should
NOT use this implementation for registering structured types such as
Collection
s or Map
s: this because parametric
type information will not be considered and you may end up having "wrong" handler
for your type.
What you need to do, instead, is to implement Deserializers
and/or Serializers
callbacks to match full type
signatures (with JavaType
).
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from class tools.jackson.databind.JacksonModule
JacksonModule.SetupContext
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected SimpleAbstractTypeResolver
Lazily-constructed resolver used for storing mappings from abstract classes to more specific implementing classes (which may be abstract or concrete)protected ValueSerializer<?>
protected ValueSerializer<?>
protected ValueDeserializerModifier
protected SimpleDeserializers
protected final Object
Unique id generated to avoid instances from ever matching so all registrations succeed.protected SimpleKeyDeserializers
protected SimpleSerializers
Lazily-constructed map that contains mix-in definitions, indexed by target class, value being mix-in to apply.protected final String
protected PropertyNamingStrategy
protected ValueSerializerModifier
protected SimpleSerializers
protected LinkedHashSet<NamedType>
Set of subtypes to register, if any.protected SimpleValueInstantiators
Lazily-constructed resolver used for storing mappings from abstract classes to more specific implementing classes (which may be abstract or concrete)protected final Version
-
Constructor Summary
ConstructorsConstructorDescriptionConstructors that should only be used for non-reusable convenience modules used by app code: "real" modules should use actual name and version number information.SimpleModule
(String name) Convenience constructor that will default version toVersion.unknownVersion()
.SimpleModule
(String name, Version version) Constructor to use for actual reusable modules.SimpleModule
(String name, Version version, Object registrationId) SimpleModule
(Version version) Convenience constructor that will use specified Version, including name fromVersion.getArtifactId()
-
Method Summary
Modifier and TypeMethodDescriptionprotected void
_checkNotNull
(Object thingy, String type) <T> SimpleModule
addAbstractTypeMapping
(Class<T> superType, Class<? extends T> subType) Lazily-constructed resolver used for storing mappings from abstract classes to more specific implementing classes (which may be abstract or concrete)<T> SimpleModule
addDeserializer
(Class<T> type, ValueDeserializer<? extends T> deser) Method for adding deserializer to handle specified type.addKeyDeserializer
(Class<?> type, KeyDeserializer deser) NOTE: This method registers "default" (de)serializers only.<T> SimpleModule
addKeySerializer
(Class<? extends T> type, ValueSerializer<T> ser) NOTE: This method registers "default" (de)serializers only.<T> SimpleModule
addSerializer
(Class<? extends T> type, ValueSerializer<T> ser) Method for adding serializer to handle values of specific type.addSerializer
(ValueSerializer<?> ser) Method for adding serializer to handle type that the serializer claims to handle (seeValueSerializer.handledType()
).addValueInstantiator
(Class<?> beanType, ValueInstantiator inst) Method for registeringValueInstantiator
to use when deserializing instances of typebeanType
.Method that returns a display that can be used by Jackson for informational purposes, as well as in associating extensions with module that provides them.Since instances are likely to be custom, implementation returnsnull
if (but only if!)registerSubtypes
(Class<?>... subtypes) Method for adding set of subtypes to be registered withObjectMapper
this is an alternative to using annotations in super type to indicate subtypes.registerSubtypes
(Collection<Class<?>> subtypes) Method for adding set of subtypes (along with type name to use) to be registered withObjectMapper
this is an alternative to using annotations in super type to indicate subtypes.registerSubtypes
(NamedType... subtypes) Method for adding set of subtypes (along with type name to use) to be registered withObjectMapper
this is an alternative to using annotations in super type to indicate subtypes.Resets currently configured abstract type mappingsResets all currently configured deserializers.Resets all currently configured key deserializers.Resets all currently configured key serializers.setMixInAnnotation
(Class<?> targetType, Class<?> mixinClass) Method for specifying that annotations define bymixinClass
should be "mixed in" with annotations thattargetType
has (as if they were directly included on it!).protected SimpleModule
Resets all currently configured serializers.void
setupModule
(JacksonModule.SetupContext context) Standard implementation handles registration of all configured customizations: it is important that sub-classes call this implementation (usually before additional custom logic) if they choose to override it; otherwise customizations will not be registered.Resets all currently configured value instantiatorsversion()
Method that returns version of this module.Methods inherited from class tools.jackson.databind.JacksonModule
getDependencies
-
Field Details
-
_name
-
_version
-
_id
Unique id generated to avoid instances from ever matching so all registrations succeed.NOTE! If serialization of SimpleModule instance needed, should be
Serializable
.- Since:
- 3.0
-
_serializers
-
_deserializers
-
_keySerializers
-
_keyDeserializers
-
_defaultNullKeySerializer
-
_defaultNullValueSerializer
-
_abstractTypes
Lazily-constructed resolver used for storing mappings from abstract classes to more specific implementing classes (which may be abstract or concrete) -
_valueInstantiators
Lazily-constructed resolver used for storing mappings from abstract classes to more specific implementing classes (which may be abstract or concrete) -
_deserializerModifier
-
_serializerModifier
-
_mixins
Lazily-constructed map that contains mix-in definitions, indexed by target class, value being mix-in to apply. -
_subtypes
Set of subtypes to register, if any. -
_namingStrategy
-
-
Constructor Details
-
SimpleModule
public SimpleModule()Constructors that should only be used for non-reusable convenience modules used by app code: "real" modules should use actual name and version number information. -
SimpleModule
Convenience constructor that will default version toVersion.unknownVersion()
. -
SimpleModule
Convenience constructor that will use specified Version, including name fromVersion.getArtifactId()
-
SimpleModule
Constructor to use for actual reusable modules. ObjectMapper may use name as identifier to notice attempts for multiple registrations of the same module (although it does not have to).- Parameters:
name
- Unique name of the moduleversion
- Version of the module
-
SimpleModule
-
-
Method Details
-
version
Description copied from class:JacksonModule
Method that returns version of this module. Can be used by Jackson for informational purposes.- Specified by:
version
in interfaceVersioned
- Specified by:
version
in classJacksonModule
-
getRegistrationId
Since instances are likely to be custom, implementation returnsnull
if (but only if!) this class is directly instantiated; but class name (default impl) for sub-classes.- Overrides:
getRegistrationId
in classJacksonModule
-
setSerializers
Resets all currently configured serializers. -
setDeserializers
Resets all currently configured deserializers. -
setKeySerializers
Resets all currently configured key serializers. -
setKeyDeserializers
Resets all currently configured key deserializers. -
setDefaultNullKeySerializer
-
setDefaultNullValueSerializer
-
setAbstractTypes
Resets currently configured abstract type mappings -
setValueInstantiators
Resets all currently configured value instantiators -
setDeserializerModifier
-
setSerializerModifier
-
setNamingStrategy
-
addSerializer
Method for adding serializer to handle type that the serializer claims to handle (seeValueSerializer.handledType()
).WARNING! Type matching only uses type-erased
Class
and should NOT be used when registering serializers for generic types likeCollection
andMap
.WARNING! "Last one wins" rule is applied. Possible earlier addition of a serializer for a given Class will be replaced.
NOTE: This method registers "default" (de)serializers only. See a note on precedence in class JavaDoc.
-
addSerializer
Method for adding serializer to handle values of specific type.NOTE: This method registers "default" (de)serializers only. See a note on precedence in class JavaDoc.
WARNING! Type matching only uses type-erased
Class
and should NOT be used when registering serializers for generic types likeCollection
andMap
.WARNING! "Last one wins" rule is applied. Possible earlier addition of a serializer for a given Class will be replaced.
NOTE: This method registers "default" (de)serializers only. See a note on precedence in class JavaDoc.
-
addKeySerializer
NOTE: This method registers "default" (de)serializers only. See a note on precedence in class JavaDoc. -
addDeserializer
Method for adding deserializer to handle specified type.WARNING! Type matching only uses type-erased
Class
and should NOT be used when registering serializers for generic types likeCollection
andMap
.WARNING! "Last one wins" rule is applied. Possible earlier addition of a serializer for a given Class will be replaced.
NOTE: This method registers "default" (de)serializers only. See a note on precedence in class JavaDoc.
-
addKeyDeserializer
NOTE: This method registers "default" (de)serializers only. See a note on precedence in class JavaDoc. -
addAbstractTypeMapping
Lazily-constructed resolver used for storing mappings from abstract classes to more specific implementing classes (which may be abstract or concrete) -
registerSubtypes
Method for adding set of subtypes to be registered withObjectMapper
this is an alternative to using annotations in super type to indicate subtypes. -
registerSubtypes
Method for adding set of subtypes (along with type name to use) to be registered withObjectMapper
this is an alternative to using annotations in super type to indicate subtypes. -
registerSubtypes
Method for adding set of subtypes (along with type name to use) to be registered withObjectMapper
this is an alternative to using annotations in super type to indicate subtypes. -
addValueInstantiator
Method for registeringValueInstantiator
to use when deserializing instances of typebeanType
.Instantiator is registered when module is registered for
ObjectMapper
. -
setMixInAnnotation
Method for specifying that annotations define bymixinClass
should be "mixed in" with annotations thattargetType
has (as if they were directly included on it!).Mix-in annotations are registered when module is registered for
ObjectMapper
. -
getModuleName
Description copied from class:JacksonModule
Method that returns a display that can be used by Jackson for informational purposes, as well as in associating extensions with module that provides them.- Specified by:
getModuleName
in classJacksonModule
-
setupModule
Standard implementation handles registration of all configured customizations: it is important that sub-classes call this implementation (usually before additional custom logic) if they choose to override it; otherwise customizations will not be registered.- Specified by:
setupModule
in classJacksonModule
-
_checkNotNull
-