Class DeserializerFactory
- java.lang.Object
-
- com.fasterxml.jackson.databind.deser.DeserializerFactory
-
- Direct Known Subclasses:
BasicDeserializerFactory
public abstract class DeserializerFactory extends java.lang.Object
Abstract class that defines API used byDeserializationContext
to construct actualJsonDeserializer
instances (which are then cached by context and/or dedicated cache).Since there are multiple broad categories of deserializers, there are multiple factory methods:
- For JSON "Array" type, we need 2 methods: one to deal with expected
Java arrays (
createArrayDeserializer(com.fasterxml.jackson.databind.DeserializationContext, com.fasterxml.jackson.databind.type.ArrayType, com.fasterxml.jackson.databind.BeanDescription)
) and the other for other Java containers likeList
s andSet
s (createCollectionDeserializer(com.fasterxml.jackson.databind.DeserializationContext, com.fasterxml.jackson.databind.type.CollectionType, com.fasterxml.jackson.databind.BeanDescription)
). Actually there is also a third method for "Collection-like" types; things like Scala collections that act like JDK collections but do not implement same interfaces. - For JSON "Object" type, we need 2 methods: one to deal with
expected Java
Map
s (createMapDeserializer(com.fasterxml.jackson.databind.DeserializationContext, com.fasterxml.jackson.databind.type.MapType, com.fasterxml.jackson.databind.BeanDescription)
), and another for POJOs (createBeanDeserializer(com.fasterxml.jackson.databind.DeserializationContext, com.fasterxml.jackson.databind.JavaType, com.fasterxml.jackson.databind.BeanDescription)
. As an additional twist there is also a callback for "Map-like" types, mostly to make it possible to support Scala Maps (which are NOT JDK Map compatible). - For Tree Model (
JsonNode
) properties there iscreateTreeDeserializer(com.fasterxml.jackson.databind.DeserializationConfig, com.fasterxml.jackson.databind.JavaType, com.fasterxml.jackson.databind.BeanDescription)
- For enumerated types (
Enum
) there iscreateEnumDeserializer(com.fasterxml.jackson.databind.DeserializationContext, com.fasterxml.jackson.databind.JavaType, com.fasterxml.jackson.databind.BeanDescription)
- For all other types,
createBeanDeserializer(com.fasterxml.jackson.databind.DeserializationContext, com.fasterxml.jackson.databind.JavaType, com.fasterxml.jackson.databind.BeanDescription)
is used.
-
-
Constructor Summary
Constructors Constructor Description DeserializerFactory()
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description abstract JsonDeserializer<?>
createArrayDeserializer(DeserializationContext ctxt, ArrayType type, BeanDescription beanDesc)
Method called to create (or, for completely immutable deserializers, reuse) a deserializer that can convert JSON content into values of specified Java type.abstract JsonDeserializer<java.lang.Object>
createBeanDeserializer(DeserializationContext ctxt, JavaType type, BeanDescription beanDesc)
Method called to create (or, for completely immutable deserializers, reuse) a deserializer that can convert JSON content into values of specified Java "bean" (POJO) type.abstract JsonDeserializer<java.lang.Object>
createBuilderBasedDeserializer(DeserializationContext ctxt, JavaType type, BeanDescription beanDesc, java.lang.Class<?> builderClass)
Method called to create a deserializer that will use specified Builder class for building value instances.abstract JsonDeserializer<?>
createCollectionDeserializer(DeserializationContext ctxt, CollectionType type, BeanDescription beanDesc)
abstract JsonDeserializer<?>
createCollectionLikeDeserializer(DeserializationContext ctxt, CollectionLikeType type, BeanDescription beanDesc)
abstract JsonDeserializer<?>
createEnumDeserializer(DeserializationContext ctxt, JavaType type, BeanDescription beanDesc)
abstract KeyDeserializer
createKeyDeserializer(DeserializationContext ctxt, JavaType type)
Method called to find if factory knows how to create a key deserializer for specified type; currently this means checking if a module has registered possible deserializers.abstract JsonDeserializer<?>
createMapDeserializer(DeserializationContext ctxt, MapType type, BeanDescription beanDesc)
abstract JsonDeserializer<?>
createMapLikeDeserializer(DeserializationContext ctxt, MapLikeType type, BeanDescription beanDesc)
abstract JsonDeserializer<?>
createReferenceDeserializer(DeserializationContext ctxt, ReferenceType type, BeanDescription beanDesc)
abstract JsonDeserializer<?>
createTreeDeserializer(DeserializationConfig config, JavaType type, BeanDescription beanDesc)
Method called to create and return a deserializer that can construct JsonNode(s) from JSON content.abstract TypeDeserializer
findTypeDeserializer(DeserializationConfig config, JavaType baseType)
Method called to find and create a type information deserializer for given base type, if one is needed.abstract ValueInstantiator
findValueInstantiator(DeserializationContext ctxt, BeanDescription beanDesc)
Method that is to find all creators (constructors, factory methods) for the bean type to deserialize.abstract boolean
hasExplicitDeserializerFor(DeserializationConfig config, java.lang.Class<?> valueType)
Method that can be used to check if databind module has explicitly declared deserializer for given (likely JDK) type, explicit meaning that there is specific deserializer for given type as opposed to auto-generated "Bean" deserializer.abstract JavaType
mapAbstractType(DeserializationConfig config, JavaType type)
Method that can be called to try to resolve an abstract type (interface, abstract class) into a concrete type, or at least something "more concrete" (abstract class instead of interface).abstract DeserializerFactory
withAbstractTypeResolver(AbstractTypeResolver resolver)
Convenience method for creating a new factory instance with additionalAbstractTypeResolver
.abstract DeserializerFactory
withAdditionalDeserializers(Deserializers additional)
Convenience method for creating a new factory instance with additional deserializer provider.abstract DeserializerFactory
withAdditionalKeyDeserializers(KeyDeserializers additional)
Convenience method for creating a new factory instance with additionalKeyDeserializers
.abstract DeserializerFactory
withDeserializerModifier(BeanDeserializerModifier modifier)
Convenience method for creating a new factory instance with additionalBeanDeserializerModifier
.abstract DeserializerFactory
withValueInstantiators(ValueInstantiators instantiators)
Convenience method for creating a new factory instance with additionalValueInstantiators
.
-
-
-
Method Detail
-
withAdditionalDeserializers
public abstract DeserializerFactory withAdditionalDeserializers(Deserializers additional)
Convenience method for creating a new factory instance with additional deserializer provider.
-
withAdditionalKeyDeserializers
public abstract DeserializerFactory withAdditionalKeyDeserializers(KeyDeserializers additional)
Convenience method for creating a new factory instance with additionalKeyDeserializers
.
-
withDeserializerModifier
public abstract DeserializerFactory withDeserializerModifier(BeanDeserializerModifier modifier)
Convenience method for creating a new factory instance with additionalBeanDeserializerModifier
.
-
withAbstractTypeResolver
public abstract DeserializerFactory withAbstractTypeResolver(AbstractTypeResolver resolver)
Convenience method for creating a new factory instance with additionalAbstractTypeResolver
.
-
withValueInstantiators
public abstract DeserializerFactory withValueInstantiators(ValueInstantiators instantiators)
Convenience method for creating a new factory instance with additionalValueInstantiators
.
-
mapAbstractType
public abstract JavaType mapAbstractType(DeserializationConfig config, JavaType type) throws JsonMappingException
Method that can be called to try to resolve an abstract type (interface, abstract class) into a concrete type, or at least something "more concrete" (abstract class instead of interface). Will either return passed type, or a more specific type.- Throws:
JsonMappingException
-
findValueInstantiator
public abstract ValueInstantiator findValueInstantiator(DeserializationContext ctxt, BeanDescription beanDesc) throws JsonMappingException
Method that is to find all creators (constructors, factory methods) for the bean type to deserialize.- Throws:
JsonMappingException
-
createBeanDeserializer
public abstract JsonDeserializer<java.lang.Object> createBeanDeserializer(DeserializationContext ctxt, JavaType type, BeanDescription beanDesc) throws JsonMappingException
Method called to create (or, for completely immutable deserializers, reuse) a deserializer that can convert JSON content into values of specified Java "bean" (POJO) type. At this point it is known that the type is not otherwise recognized as one of structured types (array, Collection, Map) or a well-known JDK type (enum, primitives/wrappers, String); this method only gets called if other options are exhausted. This also means that this method can be overridden to add support for custom types.- Parameters:
type
- Type to be deserialized- Throws:
JsonMappingException
-
createBuilderBasedDeserializer
public abstract JsonDeserializer<java.lang.Object> createBuilderBasedDeserializer(DeserializationContext ctxt, JavaType type, BeanDescription beanDesc, java.lang.Class<?> builderClass) throws JsonMappingException
Method called to create a deserializer that will use specified Builder class for building value instances.- Throws:
JsonMappingException
-
createEnumDeserializer
public abstract JsonDeserializer<?> createEnumDeserializer(DeserializationContext ctxt, JavaType type, BeanDescription beanDesc) throws JsonMappingException
- Throws:
JsonMappingException
-
createReferenceDeserializer
public abstract JsonDeserializer<?> createReferenceDeserializer(DeserializationContext ctxt, ReferenceType type, BeanDescription beanDesc) throws JsonMappingException
- Throws:
JsonMappingException
- Since:
- 2.7
-
createTreeDeserializer
public abstract JsonDeserializer<?> createTreeDeserializer(DeserializationConfig config, JavaType type, BeanDescription beanDesc) throws JsonMappingException
Method called to create and return a deserializer that can construct JsonNode(s) from JSON content.- Throws:
JsonMappingException
-
createArrayDeserializer
public abstract JsonDeserializer<?> createArrayDeserializer(DeserializationContext ctxt, ArrayType type, BeanDescription beanDesc) throws JsonMappingException
Method called to create (or, for completely immutable deserializers, reuse) a deserializer that can convert JSON content into values of specified Java type.- Parameters:
type
- Type to be deserialized- Throws:
JsonMappingException
-
createCollectionDeserializer
public abstract JsonDeserializer<?> createCollectionDeserializer(DeserializationContext ctxt, CollectionType type, BeanDescription beanDesc) throws JsonMappingException
- Throws:
JsonMappingException
-
createCollectionLikeDeserializer
public abstract JsonDeserializer<?> createCollectionLikeDeserializer(DeserializationContext ctxt, CollectionLikeType type, BeanDescription beanDesc) throws JsonMappingException
- Throws:
JsonMappingException
-
createMapDeserializer
public abstract JsonDeserializer<?> createMapDeserializer(DeserializationContext ctxt, MapType type, BeanDescription beanDesc) throws JsonMappingException
- Throws:
JsonMappingException
-
createMapLikeDeserializer
public abstract JsonDeserializer<?> createMapLikeDeserializer(DeserializationContext ctxt, MapLikeType type, BeanDescription beanDesc) throws JsonMappingException
- Throws:
JsonMappingException
-
createKeyDeserializer
public abstract KeyDeserializer createKeyDeserializer(DeserializationContext ctxt, JavaType type) throws JsonMappingException
Method called to find if factory knows how to create a key deserializer for specified type; currently this means checking if a module has registered possible deserializers.- Returns:
- Key deserializer to use for specified type, if one found; null if not (and default key deserializer should be used)
- Throws:
JsonMappingException
-
findTypeDeserializer
public abstract TypeDeserializer findTypeDeserializer(DeserializationConfig config, JavaType baseType) throws JsonMappingException
Method called to find and create a type information deserializer for given base type, if one is needed. If not needed (no polymorphic handling configured for type), should return null.Note that this method is usually only directly called for values of container (Collection, array, Map) types and root values, but not for bean property values.
- Parameters:
baseType
- Declared base type of the value to deserializer (actual deserializer type will be this type or its subtype)- Returns:
- Type deserializer to use for given base type, if one is needed; null if not.
- Throws:
JsonMappingException
-
hasExplicitDeserializerFor
public abstract boolean hasExplicitDeserializerFor(DeserializationConfig config, java.lang.Class<?> valueType)
Method that can be used to check if databind module has explicitly declared deserializer for given (likely JDK) type, explicit meaning that there is specific deserializer for given type as opposed to auto-generated "Bean" deserializer. Factory itself will check for known JDK-provided types, but registeredModule
s are also called to see if they might provide explicit deserializer.Main use for this method is with Safe Default Typing (and generally Safe Polymorphic Deserialization), during which it is good to be able to check that given raw type is explicitly supported and as such "known type" (as opposed to potentially dangerous "gadget type" which could be exploited).
This matches
Deserializers.Base.hasDeserializerFor(Class)
method, which is the mechanism used to determine if aModule
might provide an explicit deserializer instead of core databind.- Since:
- 2.11
-
-