PropertyBuilder
Date: 2016-12-04

com.fasterxml.jackson.databind.ser

## Class PropertyBuilder

- java.lang.Object
- - com.fasterxml.jackson.databind.ser.PropertyBuilder

-     public class PropertyBuilder
      extends java.lang.Object

  Helper class for `BeanSerializerFactory` that is used to construct `BeanPropertyWriter` instances. Can be sub-classed to change behavior.

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected AnnotationIntrospector` | `_annotationIntrospector`
    `protected BeanDescription` | `_beanDesc`
    `protected SerializationConfig` | `_config`
    `protected java.lang.Object` | `_defaultBean` If a property has serialization inclusion value of `JsonInclude.Include.NON_DEFAULT`, we may need to know the default value of the bean, to know if property value equals default one.
    `protected com.fasterxml.jackson.annotation.JsonInclude.Value` | `_defaultInclusion` Default inclusion mode for properties of the POJO for which properties are collected; possibly overridden on per-property basis.
    `protected boolean` | `_useRealPropertyDefaults` Marker flag used to indicate that "real" default values are to be used for properties, as per per-type value inclusion of type `NON_DEFAULT`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `PropertyBuilder(SerializationConfig config, BeanDescription beanDesc)`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected java.lang.Object` | `_throwWrapped(java.lang.Exception e, java.lang.String propName, java.lang.Object defaultBean)`
    `protected BeanPropertyWriter` | `buildWriter(SerializerProvider prov, BeanPropertyDefinition propDef, JavaType declaredType, JsonSerializer<?> ser, TypeSerializer typeSer, TypeSerializer contentTypeSer, AnnotatedMember am, boolean defaultUseStaticTyping)`
    `protected JavaType` | `findSerializationType(Annotated a, boolean useStaticTyping, JavaType declaredType)` Method that will try to determine statically defined type of property being serialized, based on annotations (for overrides), and alternatively declared type (if static typing for serialization is enabled).
    `Annotations` | `getClassAnnotations()`
    `protected java.lang.Object` | `getDefaultBean()`
    `protected java.lang.Object` | `getDefaultValue(JavaType type)` Accessor used to find out "default value" to use for comparing values to serialize, to determine whether to exclude value from serialization with inclusion type of `JsonInclude.Include.NON_DEFAULT`.
    `protected java.lang.Object` | `getPropertyDefaultValue(java.lang.String name, AnnotatedMember member, JavaType type)` Deprecated. Since 2.8.5 since this will not allow determining difference between "no default instance" case and default being `null`.

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

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

- - ### Field Detail

    - #### _config

          protected final SerializationConfig _config

    - #### _beanDesc

          protected final BeanDescription _beanDesc

    - #### _annotationIntrospector

          protected final AnnotationIntrospector _annotationIntrospector

    - #### _defaultBean

          protected java.lang.Object _defaultBean

      If a property has serialization inclusion value of `JsonInclude.Include.NON_DEFAULT`, we may need to know the default value of the bean, to know if property value equals default one.

      NOTE: only used if enclosing class defines NON_DEFAULT, but NOT if it is the global default OR per-property override.

    - #### _defaultInclusion

          protected final com.fasterxml.jackson.annotation.JsonInclude.Value _defaultInclusion

      Default inclusion mode for properties of the POJO for which properties are collected; possibly overridden on per-property basis. Combines global inclusion defaults and per-type (annotation and type-override) inclusion overrides.

    - #### _useRealPropertyDefaults

          protected final boolean _useRealPropertyDefaults

      Marker flag used to indicate that "real" default values are to be used for properties, as per per-type value inclusion of type `NON_DEFAULT`
      Since:
        2.8

  - ### Constructor Detail

    - #### PropertyBuilder

          public PropertyBuilder(SerializationConfig config,
                         BeanDescription beanDesc)

  - ### Method Detail

    - #### getClassAnnotations

          public Annotations getClassAnnotations()

    - #### buildWriter

          protected BeanPropertyWriter buildWriter(SerializerProvider prov,
                                       BeanPropertyDefinition propDef,
                                       JavaType declaredType,
                                       JsonSerializer<?> ser,
                                       TypeSerializer typeSer,
                                       TypeSerializer contentTypeSer,
                                       AnnotatedMember am,
                                       boolean defaultUseStaticTyping)
                                            throws JsonMappingException

      Parameters:
        `contentTypeSer` - Optional explicit type information serializer to use for contained values (only used for properties that are of container type)
      Throws:
        `JsonMappingException`

    - #### findSerializationType

          protected JavaType findSerializationType(Annotated a,
                                       boolean useStaticTyping,
                                       JavaType declaredType)
                                            throws JsonMappingException

      Method that will try to determine statically defined type of property being serialized, based on annotations (for overrides), and alternatively declared type (if static typing for serialization is enabled). If neither can be used (no annotations, dynamic typing), returns null.
      Throws:
        `JsonMappingException`

    - #### getDefaultBean

          protected java.lang.Object getDefaultBean()

    - #### getPropertyDefaultValue

          @Deprecated
          protected java.lang.Object getPropertyDefaultValue(java.lang.String name,
                                                            AnnotatedMember member,
                                                            JavaType type)

      Deprecated. Since 2.8.5 since this will not allow determining difference between "no default instance" case and default being `null`.
      Accessor used to find out "default value" for given property, to use for comparing values to serialize, to determine whether to exclude value from serialization with inclusion type of `JsonInclude.Include.NON_DEFAULT`. This method is called when we specifically want to know default value within context of a POJO, when annotation is within containing class, and not for property or defined as global baseline.

      Note that returning of pseudo-type `JsonInclude.Include.NON_EMPTY` requires special handling.

      Since:
        2.7

    - #### getDefaultValue

          protected java.lang.Object getDefaultValue(JavaType type)

      Accessor used to find out "default value" to use for comparing values to serialize, to determine whether to exclude value from serialization with inclusion type of `JsonInclude.Include.NON_DEFAULT`.

      Default logic is such that for primitives and wrapper types for primitives, expected defaults (0 for `int` and `java.lang.Integer`) are returned; for Strings, empty String, and for structured (Maps, Collections, arrays) and reference types, criteria `JsonInclude.Include.NON_DEFAULT` is used.

      Since:
        2.7

    - #### _throwWrapped

          protected java.lang.Object _throwWrapped(java.lang.Exception e,
                                       java.lang.String propName,
                                       java.lang.Object defaultBean)