BeanDeserializerBuilder
Date: 2016-12-04

com.fasterxml.jackson.databind.deser

## Class BeanDeserializerBuilder

- java.lang.Object
- - com.fasterxml.jackson.databind.deser.BeanDeserializerBuilder

-     public class BeanDeserializerBuilder
      extends java.lang.Object

  Builder class used for aggregating deserialization information about a POJO, in order to build a `JsonDeserializer` for deserializing instances.

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected SettableAnyProperty` | `_anySetter` Fallback setter used for handling any properties that are not mapped to regular setters.
    `protected java.util.HashMap<java.lang.String,SettableBeanProperty>` | `_backRefProperties` Back-reference properties this bean contains (if any)
    `protected BeanDescription` | `_beanDesc` Introspected information about POJO for deserializer to handle
    `protected JsonPOJOBuilder.Value` | `_builderConfig` In addition, Builder may have additional configuration
    `protected AnnotatedMethod` | `_buildMethod` When creating Builder-based deserializers, this indicates method to call on builder to finalize value.
    `protected DeserializationConfig` | `_config`
    `protected java.util.HashSet<java.lang.String>` | `_ignorableProps` Set of names of properties that are recognized but are to be ignored for deserialization purposes (meaning no exception is thrown, value is just skipped).
    `protected boolean` | `_ignoreAllUnknown` Flag that can be set to ignore and skip unknown properties.
    `protected java.util.List<ValueInjector>` | `_injectables` Value injectors for deserialization
    `protected ObjectIdReader` | `_objectIdReader` Handler for Object Id values, if Object Ids are enabled for the bean type.
    `protected java.util.Map<java.lang.String,SettableBeanProperty>` | `_properties` Properties to deserialize collected so far.
    `protected ValueInstantiator` | `_valueInstantiator` Object that will handle value instantiation for the bean type.

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `` | `BeanDeserializerBuilder(BeanDescription beanDesc, DeserializationConfig config)`
    `protected` | `BeanDeserializerBuilder(BeanDeserializerBuilder src)` Copy constructor for sub-classes to use, when constructing custom builder instances

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addBackReferenceProperty(java.lang.String referenceName, SettableBeanProperty prop)` Method called to add a property that represents so-called back reference; reference that "points back" to object that has forward reference to currently built bean.
    `void` | `addCreatorProperty(SettableBeanProperty prop)` Method called by deserializer factory, when a "creator property" (something that is passed via constructor- or factory method argument; instead of setter or field).
    `void` | `addIgnorable(java.lang.String propName)` Method that will add property name as one of properties that can be ignored if not recognized.
    `void` | `addInjectable(PropertyName propName, JavaType propType, Annotations contextAnnotations, AnnotatedMember member, java.lang.Object valueId)`
    `void` | `addOrReplaceProperty(SettableBeanProperty prop, boolean allowOverride)` Method for adding a new property or replacing a property.
    `void` | `addProperty(SettableBeanProperty prop)` Method to add a property setter.
    `JsonDeserializer<?>` | `build()` Method for constructing a `BeanDeserializer`, given all information collected.
    `AbstractDeserializer` | `buildAbstract()` Alternate build method used when we must be using some form of abstract resolution, usually by using addition Type Id ("polymorphic deserialization")
    `JsonDeserializer<?>` | `buildBuilderBased(JavaType valueType, java.lang.String expBuildMethodName)` Method for constructing a specialized deserializer that uses additional external Builder object during data binding.
    `SettableBeanProperty` | `findProperty(PropertyName propertyName)`
    `SettableAnyProperty` | `getAnySetter()`
    `JsonPOJOBuilder.Value` | `getBuilderConfig()`
    `AnnotatedMethod` | `getBuildMethod()`
    `java.util.List<ValueInjector>` | `getInjectables()`
    `ObjectIdReader` | `getObjectIdReader()`
    `java.util.Iterator<SettableBeanProperty>` | `getProperties()` Method that allows accessing all properties that this builder currently contains.
    `ValueInstantiator` | `getValueInstantiator()`
    `boolean` | `hasProperty(PropertyName propertyName)`
    `SettableBeanProperty` | `removeProperty(PropertyName name)`
    `void` | `setAnySetter(SettableAnyProperty s)`
    `void` | `setIgnoreUnknownProperties(boolean ignore)`
    `void` | `setObjectIdReader(ObjectIdReader r)`
    `void` | `setPOJOBuilder(AnnotatedMethod buildMethod, JsonPOJOBuilder.Value config)`
    `void` | `setValueInstantiator(ValueInstantiator inst)`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### _config

          protected final DeserializationConfig _config

    - #### _beanDesc

          protected final BeanDescription _beanDesc

      Introspected information about POJO for deserializer to handle

    - #### _properties

          protected final java.util.Map<java.lang.String,SettableBeanProperty> _properties

      Properties to deserialize collected so far.

    - #### _injectables

          protected java.util.List<ValueInjector> _injectables

      Value injectors for deserialization

    - #### _backRefProperties

          protected java.util.HashMap<java.lang.String,SettableBeanProperty> _backRefProperties

      Back-reference properties this bean contains (if any)

    - #### _ignorableProps

          protected java.util.HashSet<java.lang.String> _ignorableProps

      Set of names of properties that are recognized but are to be ignored for deserialization purposes (meaning no exception is thrown, value is just skipped).

    - #### _valueInstantiator

          protected ValueInstantiator _valueInstantiator

      Object that will handle value instantiation for the bean type.

    - #### _objectIdReader

          protected ObjectIdReader _objectIdReader

      Handler for Object Id values, if Object Ids are enabled for the bean type.

    - #### _anySetter

          protected SettableAnyProperty _anySetter

      Fallback setter used for handling any properties that are not mapped to regular setters. If setter is not null, it will be called once for each such property.

    - #### _ignoreAllUnknown

          protected boolean _ignoreAllUnknown

      Flag that can be set to ignore and skip unknown properties. If set, will not throw an exception for unknown properties.

    - #### _buildMethod

          protected AnnotatedMethod _buildMethod

      When creating Builder-based deserializers, this indicates method to call on builder to finalize value.

    - #### _builderConfig

          protected JsonPOJOBuilder.Value _builderConfig

      In addition, Builder may have additional configuration

  - ### Constructor Detail

    - #### BeanDeserializerBuilder

          public BeanDeserializerBuilder(BeanDescription beanDesc,
                                 DeserializationConfig config)

    - #### BeanDeserializerBuilder

          protected BeanDeserializerBuilder(BeanDeserializerBuilder src)

      Copy constructor for sub-classes to use, when constructing custom builder instances

  - ### Method Detail

    - #### addOrReplaceProperty

          public void addOrReplaceProperty(SettableBeanProperty prop,
                                  boolean allowOverride)

      Method for adding a new property or replacing a property.

    - #### addProperty

          public void addProperty(SettableBeanProperty prop)

      Method to add a property setter. Will ensure that there is no unexpected override; if one is found will throw a `IllegalArgumentException`.

    - #### addBackReferenceProperty

          public void addBackReferenceProperty(java.lang.String referenceName,
                                      SettableBeanProperty prop)

      Method called to add a property that represents so-called back reference; reference that "points back" to object that has forward reference to currently built bean.

    - #### addInjectable

          public void addInjectable(PropertyName propName,
                           JavaType propType,
                           Annotations contextAnnotations,
                           AnnotatedMember member,
                           java.lang.Object valueId)

    - #### addIgnorable

          public void addIgnorable(java.lang.String propName)

      Method that will add property name as one of properties that can be ignored if not recognized.

    - #### addCreatorProperty

          public void addCreatorProperty(SettableBeanProperty prop)

      Method called by deserializer factory, when a "creator property" (something that is passed via constructor- or factory method argument; instead of setter or field).

      Default implementation does not do anything; we may need to revisit this decision if these properties need to be available through accessors. For now, however, we just have to ensure that we don't try to resolve types that masked setter/field has (see [JACKSON-700] for details).

    - #### setAnySetter

          public void setAnySetter(SettableAnyProperty s)

    - #### setIgnoreUnknownProperties

          public void setIgnoreUnknownProperties(boolean ignore)

    - #### setValueInstantiator

          public void setValueInstantiator(ValueInstantiator inst)

    - #### setObjectIdReader

          public void setObjectIdReader(ObjectIdReader r)

    - #### setPOJOBuilder

          public void setPOJOBuilder(AnnotatedMethod buildMethod,
                            JsonPOJOBuilder.Value config)

    - #### getProperties

          public java.util.Iterator<SettableBeanProperty> getProperties()

      Method that allows accessing all properties that this builder currently contains.

      Note that properties are returned in order that properties are ordered (explictly, or by rule), which is the serialization order.

    - #### findProperty

          public SettableBeanProperty findProperty(PropertyName propertyName)

    - #### hasProperty

          public boolean hasProperty(PropertyName propertyName)

    - #### removeProperty

          public SettableBeanProperty removeProperty(PropertyName name)

    - #### getAnySetter

          public SettableAnyProperty getAnySetter()

    - #### getValueInstantiator

          public ValueInstantiator getValueInstantiator()

    - #### getInjectables

          public java.util.List<ValueInjector> getInjectables()

    - #### getObjectIdReader

          public ObjectIdReader getObjectIdReader()

    - #### getBuildMethod

          public AnnotatedMethod getBuildMethod()

    - #### getBuilderConfig

          public JsonPOJOBuilder.Value getBuilderConfig()

    - #### build

          public JsonDeserializer<?> build()

      Method for constructing a `BeanDeserializer`, given all information collected.

    - #### buildAbstract

          public AbstractDeserializer buildAbstract()

      Alternate build method used when we must be using some form of abstract resolution, usually by using addition Type Id ("polymorphic deserialization")
      Since:
        2.0

    - #### buildBuilderBased

          public JsonDeserializer<?> buildBuilderBased(JavaType valueType,
                                              java.lang.String expBuildMethodName)

      Method for constructing a specialized deserializer that uses additional external Builder object during data binding.