java.lang.Object
tools.jackson.databind.ser.SerializerFactory
tools.jackson.databind.ser.BasicSerializerFactory
- All Implemented Interfaces:
Serializable
- Direct Known Subclasses:
BeanSerializerFactory
Factory class that can provide serializers for standard JDK classes,
as well as custom classes that extend standard classes or implement
one of "well-known" interfaces (such as
Collection
).
Since all the serializers are eagerly instantiated, and there is no additional introspection or customizability of these types, this factory is essentially stateless.
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final SerializerFactoryConfig
Configuration settings for this factory; immutable instance (just like this factory), new version created via copy-constructor (fluent-style) -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
We will provide default constructor to allow sub-classing, but make it protected so that no non-singleton instances of the class will be instantiated. -
Method Summary
Modifier and TypeMethodDescriptionprotected ValueSerializer<?>
_buildReferenceSerializer
(SerializationContext ctxt, Class<?> baseType, ReferenceType refType, BeanDescription.Supplier beanDescRef, boolean staticTyping, TypeSerializer contentTypeSerializer, ValueSerializer<Object> contentSerializer) protected JsonFormat.Value
_calculateEffectiveFormat
(SerializationContext ctxt, BeanDescription.Supplier beanDescRef, Class<?> baseType, JsonFormat.Value formatOverrides) Helper method that will combine all available pieces of format configuration and calculate effective format settings to use.protected MapSerializer
_checkMapContentInclusion
(SerializationContext ctxt, BeanDescription.Supplier beanDescRef, MapSerializer mapSer) Helper method that does figures out content inclusion value to use, if any, and construct re-configuredMapSerializer
appropriately.protected ValueSerializer<Object>
Helper method called to try to find whether there is an annotation in the class that indicates content ("value") serializer to use.protected JsonInclude.Value
_findInclusionWithContent
(SerializationContext ctxt, BeanDescription.Supplier beanDescRef, JavaType contentType, Class<?> configType) Helper method used for finding inclusion definitions for structured container types likeMap
s and referential types (likeAtomicReference
).protected ValueSerializer<Object>
Helper method called to try to find whether there is an annotation in the class that indicates key serializer to use.protected ValueSerializer<?>
buildArraySerializer
(SerializationContext ctxt, ArrayType type, BeanDescription.Supplier beanDescRef, JsonFormat.Value formatOverrides, boolean staticTyping, TypeSerializer elementTypeSerializer, ValueSerializer<Object> elementValueSerializer) Helper method that handles configuration details when constructing serializers forObject[]
(and subtypes, except for String).buildCollectionSerializer
(JavaType elemType, boolean staticTyping, TypeSerializer vts, ValueSerializer<Object> valueSerializer) protected ValueSerializer<?>
buildCollectionSerializer
(SerializationContext ctxt, CollectionType type, BeanDescription.Supplier beanDescRef, JsonFormat.Value formatOverrides, boolean staticTyping, TypeSerializer elementTypeSerializer, ValueSerializer<Object> elementValueSerializer) Helper method that handles configuration details when constructing serializers forList
types that support efficient by-index accessprotected ValueSerializer<?>
buildContainerSerializer
(SerializationContext ctxt, JavaType type, BeanDescription.Supplier beanDescRef, JsonFormat.Value formatOverrides, boolean staticTyping) protected ValueSerializer<?>
buildEnumSerializer
(SerializationContext ctxt, JavaType type, BeanDescription.Supplier beanDescRef, JsonFormat.Value effectiveFormat) buildEnumSetSerializer
(JavaType enumType) buildIndexedListSerializer
(JavaType elemType, boolean staticTyping, TypeSerializer vts, ValueSerializer<Object> valueSerializer) protected ValueSerializer<?>
buildIterableSerializer
(SerializationContext ctxt, JavaType type, BeanDescription.Supplier beanDescRef, JsonFormat.Value effectiveFormat, boolean staticTyping, JavaType valueType) protected ValueSerializer<?>
buildIteratorSerializer
(SerializationContext ctxt, JavaType type, BeanDescription.Supplier beanDesc, JsonFormat.Value formatOverrides, boolean staticTyping, JavaType valueType) protected ValueSerializer<?>
buildMapEntrySerializer
(SerializationContext ctxt, JavaType type, BeanDescription.Supplier beanDescRef, JsonFormat.Value effectiveFormat, boolean staticTyping, JavaType keyType, JavaType valueType) protected ValueSerializer<?>
buildMapSerializer
(SerializationContext ctxt, MapType type, BeanDescription.Supplier beanDescRef, JsonFormat.Value formatOverrides, boolean staticTyping, ValueSerializer<Object> keySerializer, TypeSerializer elementTypeSerializer, ValueSerializer<Object> elementValueSerializer) Helper method that handles configuration details when constructing serializers forMap
types.createKeySerializer
(SerializationContext ctxt, JavaType keyType) Method called to create serializer to use for serializing JSON property names (which must be output asJsonToken.FIELD_NAME
) for Map that has specified declared key type, and is for specified property (or, if property is null, as root value)protected Iterable<Serializers>
findConverter
(SerializationContext ctxt, Annotated a) protected ValueSerializer<?>
findConvertingSerializer
(SerializationContext ctxt, Annotated a, ValueSerializer<?> ser) Helper method that will check whether given annotated entity (usually class, but may also be a property accessor) indicates that aConverter
is to be used; and if so, to construct and return suitable serializer for it.protected Object
findFilterId
(SerializationConfig config, BeanDescription.Supplier beanDescRef) Method called to find filter that is configured to be used with bean serializer being built, if any.findPropertyContentTypeSerializer
(SerializationContext ctxt, JavaType containerType, AnnotatedMember accessor) Method called to create a type information serializer for values of given container property if one is needed.findReferenceSerializer
(SerializationContext ctxt, ReferenceType refType, BeanDescription.Supplier beanDesc, JsonFormat.Value format, boolean staticTyping) protected final ValueSerializer<?>
findSerializerByAddonType
(SerializationContext ctxt, JavaType javaType, BeanDescription.Supplier beanDescRef, JsonFormat.Value formatOverrides, boolean staticTyping) Reflection-based serialized find method, which checks if given class implements one of recognized "add-on" interfaces.protected final ValueSerializer<?>
findSerializerByAnnotations
(SerializationContext ctxt, JavaType type, BeanDescription.Supplier beanDescRef) Method called to see if one of primary per-class annotations (or related, like implementing ofJacksonSerializable
) determines the serializer to use.protected final ValueSerializer<?>
findSerializerByPrimaryType
(SerializationContext ctxt, JavaType type, BeanDescription.Supplier beanDescRef, JsonFormat.Value formatOverrides, boolean staticTyping) Method for checking if we can determine serializer to use based on set of known primary types, checking for set of known base types (exact matches having been compared against withfindSerializerByLookup
).protected ValueSerializer<Object>
Helper method called to check if a class or method has an annotation (@link tools.jackson.databind.annotation.JsonSerialize#using) that tells the class to use for serialization.Returns serializer used to (try to) output a null key, due to an entry ofMap
having null key.protected boolean
isIndexedList
(Class<?> cls) protected boolean
usesStaticTyping
(SerializationConfig config, BeanDescription.Supplier beanDescRef) Helper method to check whether global settings and/or class annotations for the bean class indicate that static typing (declared types) should be used for properties.final SerializerFactory
withAdditionalKeySerializers
(Serializers additional) Convenience method for creating a new factory instance with an additional key serializer provider.final SerializerFactory
withAdditionalSerializers
(Serializers additional) Convenience method for creating a new factory instance with an additional serializer provider.protected abstract SerializerFactory
withConfig
(SerializerFactoryConfig config) Method used for creating a new instance of this factory, but with different configuration.final SerializerFactory
withNullKeySerializer
(ValueSerializer<?> nks) final SerializerFactory
final SerializerFactory
Convenience method for creating a new factory instance with additional bean serializer modifier.Methods inherited from class tools.jackson.databind.ser.SerializerFactory
createSerializer, createSerializer
-
Field Details
-
_factoryConfig
Configuration settings for this factory; immutable instance (just like this factory), new version created via copy-constructor (fluent-style)
-
-
Constructor Details
-
BasicSerializerFactory
We will provide default constructor to allow sub-classing, but make it protected so that no non-singleton instances of the class will be instantiated.
-
-
Method Details
-
withConfig
Method used for creating a new instance of this factory, but with different configuration. Reason for specifying factory method (instead of plain constructor) is to allow proper sub-classing of factories.Note that custom sub-classes generally must override implementation of this method, as it usually requires instantiating a new instance of factory type. Check out javadocs for
BeanSerializerFactory
for more details. -
withAdditionalSerializers
Convenience method for creating a new factory instance with an additional serializer provider.- Specified by:
withAdditionalSerializers
in classSerializerFactory
-
withAdditionalKeySerializers
Convenience method for creating a new factory instance with an additional key serializer provider.- Specified by:
withAdditionalKeySerializers
in classSerializerFactory
-
withSerializerModifier
Convenience method for creating a new factory instance with additional bean serializer modifier.- Specified by:
withSerializerModifier
in classSerializerFactory
-
withNullValueSerializer
- Specified by:
withNullValueSerializer
in classSerializerFactory
-
withNullKeySerializer
- Specified by:
withNullKeySerializer
in classSerializerFactory
-
createKeySerializer
Description copied from class:SerializerFactory
Method called to create serializer to use for serializing JSON property names (which must be output asJsonToken.FIELD_NAME
) for Map that has specified declared key type, and is for specified property (or, if property is null, as root value)- Specified by:
createKeySerializer
in classSerializerFactory
keyType
- Declared type for Map keys- Returns:
- Serializer to use, if factory knows it; null if not (in which case default serializer is to be used)
-
getDefaultNullKeySerializer
Description copied from class:SerializerFactory
Returns serializer used to (try to) output a null key, due to an entry ofMap
having null key. The default implementation will throw an exception if this happens; alternative implementation (like one that would write an Empty String) can be defined.- Specified by:
getDefaultNullKeySerializer
in classSerializerFactory
-
getDefaultNullValueSerializer
- Specified by:
getDefaultNullValueSerializer
in classSerializerFactory
-
customSerializers
-
findPropertyContentTypeSerializer
public TypeSerializer findPropertyContentTypeSerializer(SerializationContext ctxt, JavaType containerType, AnnotatedMember accessor) Method called to create a type information serializer for values of given container property if one is needed. If not needed (no polymorphic handling configured), should return null.- Parameters:
containerType
- Declared type of the container to use as the base type for type information serializer- Returns:
- Type serializer to use for property value contents, if one is needed; null if not.
-
findSerializerByAnnotations
protected final ValueSerializer<?> findSerializerByAnnotations(SerializationContext ctxt, JavaType type, BeanDescription.Supplier beanDescRef) Method called to see if one of primary per-class annotations (or related, like implementing ofJacksonSerializable
) determines the serializer to use.Currently handles things like:
- If type implements
JacksonSerializable
, use that - If type has
JsonValue
annotation (or equivalent), build serializer based on that property
- If type implements
-
findSerializerByPrimaryType
protected final ValueSerializer<?> findSerializerByPrimaryType(SerializationContext ctxt, JavaType type, BeanDescription.Supplier beanDescRef, JsonFormat.Value formatOverrides, boolean staticTyping) Method for checking if we can determine serializer to use based on set of known primary types, checking for set of known base types (exact matches having been compared against withfindSerializerByLookup
). This does not include "secondary" interfaces, but mostly concrete or abstract base classes. -
findSerializerByAddonType
protected final ValueSerializer<?> findSerializerByAddonType(SerializationContext ctxt, JavaType javaType, BeanDescription.Supplier beanDescRef, JsonFormat.Value formatOverrides, boolean staticTyping) Reflection-based serialized find method, which checks if given class implements one of recognized "add-on" interfaces. Add-on here means a role that is usually or can be a secondary trait: for example, bean classes may implementIterable
, but their main function is usually something else. The reason for -
findSerializerFromAnnotation
protected ValueSerializer<Object> findSerializerFromAnnotation(SerializationContext ctxt, Annotated a) Helper method called to check if a class or method has an annotation (@link tools.jackson.databind.annotation.JsonSerialize#using) that tells the class to use for serialization. Returns null if no such annotation found. -
findConvertingSerializer
protected ValueSerializer<?> findConvertingSerializer(SerializationContext ctxt, Annotated a, ValueSerializer<?> ser) Helper method that will check whether given annotated entity (usually class, but may also be a property accessor) indicates that aConverter
is to be used; and if so, to construct and return suitable serializer for it. If not, will simply return given serializer as is. -
findConverter
-
buildContainerSerializer
protected ValueSerializer<?> buildContainerSerializer(SerializationContext ctxt, JavaType type, BeanDescription.Supplier beanDescRef, JsonFormat.Value formatOverrides, boolean staticTyping) -
buildCollectionSerializer
protected ValueSerializer<?> buildCollectionSerializer(SerializationContext ctxt, CollectionType type, BeanDescription.Supplier beanDescRef, JsonFormat.Value formatOverrides, boolean staticTyping, TypeSerializer elementTypeSerializer, ValueSerializer<Object> elementValueSerializer) Helper method that handles configuration details when constructing serializers forList
types that support efficient by-index access -
isIndexedList
-
buildIndexedListSerializer
public StdContainerSerializer<?> buildIndexedListSerializer(JavaType elemType, boolean staticTyping, TypeSerializer vts, ValueSerializer<Object> valueSerializer) -
buildCollectionSerializer
public StdContainerSerializer<?> buildCollectionSerializer(JavaType elemType, boolean staticTyping, TypeSerializer vts, ValueSerializer<Object> valueSerializer) -
buildEnumSetSerializer
-
buildMapSerializer
protected ValueSerializer<?> buildMapSerializer(SerializationContext ctxt, MapType type, BeanDescription.Supplier beanDescRef, JsonFormat.Value formatOverrides, boolean staticTyping, ValueSerializer<Object> keySerializer, TypeSerializer elementTypeSerializer, ValueSerializer<Object> elementValueSerializer) Helper method that handles configuration details when constructing serializers forMap
types. -
_checkMapContentInclusion
protected MapSerializer _checkMapContentInclusion(SerializationContext ctxt, BeanDescription.Supplier beanDescRef, MapSerializer mapSer) Helper method that does figures out content inclusion value to use, if any, and construct re-configuredMapSerializer
appropriately. -
buildMapEntrySerializer
protected ValueSerializer<?> buildMapEntrySerializer(SerializationContext ctxt, JavaType type, BeanDescription.Supplier beanDescRef, JsonFormat.Value effectiveFormat, boolean staticTyping, JavaType keyType, JavaType valueType) -
_findInclusionWithContent
protected JsonInclude.Value _findInclusionWithContent(SerializationContext ctxt, BeanDescription.Supplier beanDescRef, JavaType contentType, Class<?> configType) Helper method used for finding inclusion definitions for structured container types likeMap
s and referential types (likeAtomicReference
).- Parameters:
contentType
- Declared full content type of containerconfigType
- Raw base type under which `configOverride`, if any, needs to be defined
-
buildArraySerializer
protected ValueSerializer<?> buildArraySerializer(SerializationContext ctxt, ArrayType type, BeanDescription.Supplier beanDescRef, JsonFormat.Value formatOverrides, boolean staticTyping, TypeSerializer elementTypeSerializer, ValueSerializer<Object> elementValueSerializer) Helper method that handles configuration details when constructing serializers forObject[]
(and subtypes, except for String). -
findReferenceSerializer
public ValueSerializer<?> findReferenceSerializer(SerializationContext ctxt, ReferenceType refType, BeanDescription.Supplier beanDesc, JsonFormat.Value format, boolean staticTyping) -
_buildReferenceSerializer
protected ValueSerializer<?> _buildReferenceSerializer(SerializationContext ctxt, Class<?> baseType, ReferenceType refType, BeanDescription.Supplier beanDescRef, boolean staticTyping, TypeSerializer contentTypeSerializer, ValueSerializer<Object> contentSerializer) -
buildIteratorSerializer
protected ValueSerializer<?> buildIteratorSerializer(SerializationContext ctxt, JavaType type, BeanDescription.Supplier beanDesc, JsonFormat.Value formatOverrides, boolean staticTyping, JavaType valueType) -
buildIterableSerializer
protected ValueSerializer<?> buildIterableSerializer(SerializationContext ctxt, JavaType type, BeanDescription.Supplier beanDescRef, JsonFormat.Value effectiveFormat, boolean staticTyping, JavaType valueType) -
buildEnumSerializer
protected ValueSerializer<?> buildEnumSerializer(SerializationContext ctxt, JavaType type, BeanDescription.Supplier beanDescRef, JsonFormat.Value effectiveFormat) -
_calculateEffectiveFormat
protected JsonFormat.Value _calculateEffectiveFormat(SerializationContext ctxt, BeanDescription.Supplier beanDescRef, Class<?> baseType, JsonFormat.Value formatOverrides) Helper method that will combine all available pieces of format configuration and calculate effective format settings to use.- Since:
- 3.0
-
_findKeySerializer
Helper method called to try to find whether there is an annotation in the class that indicates key serializer to use. If so, will try to instantiate key serializer and return it; otherwise returns null. -
_findContentSerializer
Helper method called to try to find whether there is an annotation in the class that indicates content ("value") serializer to use. If so, will try to instantiate value serializer and return it; otherwise returns null. -
findFilterId
Method called to find filter that is configured to be used with bean serializer being built, if any. -
usesStaticTyping
protected boolean usesStaticTyping(SerializationConfig config, BeanDescription.Supplier beanDescRef) Helper method to check whether global settings and/or class annotations for the bean class indicate that static typing (declared types) should be used for properties. (instead of dynamic runtime types).
-