public abstract class DeserializerFactory extends Object
DeserializationContext
to construct actual
JsonDeserializer
instances (which are then cached by
context and/or dedicated cache).
Since there are multiple broad categories of deserializers, there are multiple factory methods:
createArrayDeserializer(com.fasterxml.jackson.databind.DeserializationContext, com.fasterxml.jackson.databind.type.ArrayType, com.fasterxml.jackson.databind.BeanDescription)
)
and the other for other Java containers like List
s
and Set
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.
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).
JsonNode
) properties there is
createTreeDeserializer(com.fasterxml.jackson.databind.DeserializationConfig, com.fasterxml.jackson.databind.JavaType, com.fasterxml.jackson.databind.BeanDescription)
Enum
) there is
createEnumDeserializer(com.fasterxml.jackson.databind.DeserializationContext, com.fasterxml.jackson.databind.JavaType, com.fasterxml.jackson.databind.BeanDescription)
createBeanDeserializer(com.fasterxml.jackson.databind.DeserializationContext, com.fasterxml.jackson.databind.JavaType, com.fasterxml.jackson.databind.BeanDescription)
is used.
Modifier and Type | Field and Description |
---|---|
protected static Deserializers[] |
NO_DESERIALIZERS |
Constructor and Description |
---|
DeserializerFactory() |
Modifier and Type | Method and 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<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<Object> |
createBuilderBasedDeserializer(DeserializationContext ctxt,
JavaType type,
BeanDescription beanDesc,
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,
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 additional
AbstractTypeResolver . |
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 additional
KeyDeserializers . |
abstract DeserializerFactory |
withDeserializerModifier(BeanDeserializerModifier modifier)
Convenience method for creating a new factory instance with additional
BeanDeserializerModifier . |
abstract DeserializerFactory |
withValueInstantiators(ValueInstantiators instantiators)
Convenience method for creating a new factory instance with additional
ValueInstantiators . |
protected static final Deserializers[] NO_DESERIALIZERS
public abstract DeserializerFactory withAdditionalDeserializers(Deserializers additional)
public abstract DeserializerFactory withAdditionalKeyDeserializers(KeyDeserializers additional)
KeyDeserializers
.public abstract DeserializerFactory withDeserializerModifier(BeanDeserializerModifier modifier)
BeanDeserializerModifier
.public abstract DeserializerFactory withAbstractTypeResolver(AbstractTypeResolver resolver)
AbstractTypeResolver
.public abstract DeserializerFactory withValueInstantiators(ValueInstantiators instantiators)
ValueInstantiators
.public abstract JavaType mapAbstractType(DeserializationConfig config, JavaType type) throws JsonMappingException
JsonMappingException
public abstract ValueInstantiator findValueInstantiator(DeserializationContext ctxt, BeanDescription beanDesc) throws JsonMappingException
JsonMappingException
public abstract JsonDeserializer<Object> createBeanDeserializer(DeserializationContext ctxt, JavaType type, BeanDescription beanDesc) throws JsonMappingException
type
- Type to be deserializedJsonMappingException
public abstract JsonDeserializer<Object> createBuilderBasedDeserializer(DeserializationContext ctxt, JavaType type, BeanDescription beanDesc, Class<?> builderClass) throws JsonMappingException
JsonMappingException
public abstract JsonDeserializer<?> createEnumDeserializer(DeserializationContext ctxt, JavaType type, BeanDescription beanDesc) throws JsonMappingException
JsonMappingException
public abstract JsonDeserializer<?> createReferenceDeserializer(DeserializationContext ctxt, ReferenceType type, BeanDescription beanDesc) throws JsonMappingException
JsonMappingException
public abstract JsonDeserializer<?> createTreeDeserializer(DeserializationConfig config, JavaType type, BeanDescription beanDesc) throws JsonMappingException
JsonMappingException
public abstract JsonDeserializer<?> createArrayDeserializer(DeserializationContext ctxt, ArrayType type, BeanDescription beanDesc) throws JsonMappingException
type
- Type to be deserializedJsonMappingException
public abstract JsonDeserializer<?> createCollectionDeserializer(DeserializationContext ctxt, CollectionType type, BeanDescription beanDesc) throws JsonMappingException
JsonMappingException
public abstract JsonDeserializer<?> createCollectionLikeDeserializer(DeserializationContext ctxt, CollectionLikeType type, BeanDescription beanDesc) throws JsonMappingException
JsonMappingException
public abstract JsonDeserializer<?> createMapDeserializer(DeserializationContext ctxt, MapType type, BeanDescription beanDesc) throws JsonMappingException
JsonMappingException
public abstract JsonDeserializer<?> createMapLikeDeserializer(DeserializationContext ctxt, MapLikeType type, BeanDescription beanDesc) throws JsonMappingException
JsonMappingException
public abstract KeyDeserializer createKeyDeserializer(DeserializationContext ctxt, JavaType type) throws JsonMappingException
JsonMappingException
public abstract TypeDeserializer findTypeDeserializer(DeserializationConfig config, JavaType baseType) throws JsonMappingException
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.
baseType
- Declared base type of the value to deserializer (actual
deserializer type will be this type or its subtype)JsonMappingException
public abstract boolean hasExplicitDeserializerFor(DeserializationConfig config, Class<?> valueType)
Module
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 a Module
might provide an explicit
deserializer instead of core databind.
Copyright © 2021 JBoss by Red Hat. All rights reserved.