Class DeserializerFactory

java.lang.Object
tools.jackson.databind.deser.DeserializerFactory
Direct Known Subclasses:
BasicDeserializerFactory

public abstract class DeserializerFactory extends Object
Abstract class that defines API used by DeserializationContext to construct actual ValueDeserializer instances (which are then cached by context and/or dedicated cache).

Since there are multiple broad categories of deserializers, there are multiple factory methods:

  • Field Details

    • NO_DESERIALIZERS

      protected static final Deserializers[] NO_DESERIALIZERS
  • Constructor Details

    • DeserializerFactory

      public DeserializerFactory()
  • Method Details

    • findValueInstantiator

      public abstract ValueInstantiator findValueInstantiator(DeserializationContext ctxt, BeanDescription beanDesc)
      Method that is to find all creators (constructors, factory methods) for the bean type to deserialize.
    • createBeanDeserializer

      public abstract ValueDeserializer<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. 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
    • createBuilderBasedDeserializer

      public abstract ValueDeserializer<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.
    • createEnumDeserializer

      public abstract ValueDeserializer<?> createEnumDeserializer(DeserializationContext ctxt, JavaType type, BeanDescription beanDesc)
    • createReferenceDeserializer

      public abstract ValueDeserializer<?> createReferenceDeserializer(DeserializationContext ctxt, ReferenceType type, BeanDescription beanDesc)
    • createTreeDeserializer

      public abstract ValueDeserializer<?> createTreeDeserializer(DeserializationConfig config, JavaType type, BeanDescription beanDesc)
      Method called to create and return a deserializer that can construct JsonNode(s) from JSON content.
    • createArrayDeserializer

      public abstract ValueDeserializer<?> 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.
      Parameters:
      type - Type to be deserialized
    • createCollectionDeserializer

      public abstract ValueDeserializer<?> createCollectionDeserializer(DeserializationContext ctxt, CollectionType type, BeanDescription beanDesc)
    • createCollectionLikeDeserializer

      public abstract ValueDeserializer<?> createCollectionLikeDeserializer(DeserializationContext ctxt, CollectionLikeType type, BeanDescription beanDesc)
    • createMapDeserializer

      public abstract ValueDeserializer<?> createMapDeserializer(DeserializationContext ctxt, MapType type, BeanDescription beanDesc)
    • createMapLikeDeserializer

      public abstract ValueDeserializer<?> createMapLikeDeserializer(DeserializationContext ctxt, MapLikeType type, BeanDescription beanDesc)
    • createKeyDeserializer

      public 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.
      Returns:
      Key deserializer to use for specified type, if one found; null if not (and default key deserializer should be used)
    • hasExplicitDeserializerFor

      public abstract boolean hasExplicitDeserializerFor(DatabindContext ctxt, 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 registered JacksonModules 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.

    • 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 additional KeyDeserializers.
    • withDeserializerModifier

      public abstract DeserializerFactory withDeserializerModifier(ValueDeserializerModifier modifier)
      Convenience method for creating a new factory instance with additional ValueDeserializerModifier.
    • withValueInstantiators

      public abstract DeserializerFactory withValueInstantiators(ValueInstantiators instantiators)
      Convenience method for creating a new factory instance with additional ValueInstantiators.