BeanPropertyWriter (Jackson JSON Processor)
Date: 2013-07-14

org.codehaus.jackson.map.ser

## Class BeanPropertyWriter

- java.lang.Object
- - org.codehaus.jackson.map.ser.BeanPropertyWriter

- All Implemented Interfaces:
    BeanProperty, Named
  Direct Known Subclasses:
    UnwrappingBeanPropertyWriter

      public class BeanPropertyWriter
      extends Object
      implements BeanProperty

  Base bean property handler class, which implements common parts of reflection-based functionality for accessing a property value and serializing it.

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from interface org.codehaus.jackson.map.BeanProperty

      `BeanProperty.Std`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected Method` | `_accessorMethod` Accessor method used to get property value, for method-accessible properties.
    `protected JavaType` | `_cfgSerializationType` Type to use for locating serializer; normally same as return type of the accessor method, but may be overridden by annotations.
    `protected Annotations` | `_contextAnnotations` Annotations from context (most often, class that declares property, or in case of sub-class serializer, from that sub-class)
    `protected JavaType` | `_declaredType` Type property is declared to have, either in class definition or associated annotations.
    `protected PropertySerializerMap` | `_dynamicSerializers` In case serializer is not known statically (i.e.
    `protected Field` | `_field` Field that contains the property value for field-accessible properties.
    `protected Class<?>[]` | `_includeInViews` Alternate set of property writers used when view-based filtering is available for the Bean.
    `protected HashMap<Object,Object>` | `_internalSettings`
    `protected AnnotatedMember` | `_member` Member (field, method) that represents property and allows access to associated annotations.
    `protected SerializedString` | `_name` Logical name of the property; will be used as the field name under which value for the property is written.
    `protected JavaType` | `_nonTrivialBaseType` Base type of the property, if the declared type is "non-trivial"; meaning it is either a structured type (collection, map, array), or parametrized.
    `protected JsonSerializer<Object>` | `_serializer` Serializer to use for writing out the value: null if it can not be known statically; non-null if it can.
    `protected Object` | `_suppressableValue` Value that is considered default value of the property; used for default-value-suppression if enabled.
    `protected boolean` | `_suppressNulls` Flag to indicate that null values for this property are not to be written out.
    `protected TypeSerializer` | `_typeSerializer` If property being serialized needs type information to be included this is the type serializer to use.

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `` | `BeanPropertyWriter(AnnotatedMember member, Annotations contextAnnotations, SerializedString name, JavaType declaredType, JsonSerializer<Object> ser, TypeSerializer typeSer, JavaType serType, Method m, Field f, boolean suppressNulls, Object suppressableValue)`
    `` | `BeanPropertyWriter(AnnotatedMember member, Annotations contextAnnotations, String name, JavaType declaredType, JsonSerializer<Object> ser, TypeSerializer typeSer, JavaType serType, Method m, Field f, boolean suppressNulls, Object suppressableValue)`
    `protected` | `BeanPropertyWriter(BeanPropertyWriter base)` "Copy constructor" to be used by filtering sub-classes
    `protected` | `BeanPropertyWriter(BeanPropertyWriter base, JsonSerializer<Object> ser)` "Copy constructor" to be used by filtering sub-classes

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected JsonSerializer<Object>` | `_findAndAddDynamic(PropertySerializerMap map, Class<?> type, SerializerProvider provider)`
    `protected void` | `_reportSelfReference(Object bean)`
    `Object` | `get(Object bean)` Method that can be used to access value of the property this Object describes, from given bean instance.
    `<A extends Annotation> A` | `getAnnotation(Class<A> acls)` Method for finding annotation associated with this property; meaning annotation associated with one of entities used to access property.
    `<A extends Annotation> A` | `getContextAnnotation(Class<A> acls)` Method for finding annotation associated with context of this property; usually class in which member is declared (or its subtype if processing subtype).
    `Type` | `getGenericPropertyType()` Get the generic property type of this property writer.
    `Object` | `getInternalSetting(Object key)` Method for accessing value of specified internal setting.
    `AnnotatedMember` | `getMember()` Method for accessing primary physical entity that represents the property; annotated field, method or constructor property.
    `String` | `getName()` Method to get logical name of the property
    `Class<?>` | `getPropertyType()`
    `Class<?>` | `getRawSerializationType()`
    `JavaType` | `getSerializationType()`
    `SerializedString` | `getSerializedName()`
    `JsonSerializer<Object>` | `getSerializer()`
    `JavaType` | `getType()` Method to get declared type of the property.
    `Class<?>[]` | `getViews()`
    `boolean` | `hasSerializer()`
    `Object` | `removeInternalSetting(Object key)` Method for removing entry for specified internal setting.
    `void` | `serializeAsField(Object bean, JsonGenerator jgen, SerializerProvider prov)` Method called to access property that this bean stands for, from within given bean, and to serialize it as a JSON Object field using appropriate serializer.
    `Object` | `setInternalSetting(Object key, Object value)` Method for setting specific internal setting to given value
    `void` | `setNonTrivialBaseType(JavaType t)` Method called to define type to consider as "non-trivial" basetype, needed for dynamic serialization resolution for complex (usually container) types
    `void` | `setViews(Class<?>[] views)` Method for defining which views to included value of this property in.
    `String` | `toString()`
    `BeanPropertyWriter` | `unwrappingWriter()` Method called create an instance that handles details of unwrapping contained value.
    `BeanPropertyWriter` | `withSerializer(JsonSerializer<Object> ser)` Method that will construct and return a new writer that has same properties as this writer, but uses specified serializer instead of currently configured one (if any).

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

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

- - ### Field Detail

    - #### _member

          protected final AnnotatedMember _member

      Member (field, method) that represents property and allows access to associated annotations.
      Since:
        1.7

    - #### _contextAnnotations

          protected final Annotations _contextAnnotations

      Annotations from context (most often, class that declares property, or in case of sub-class serializer, from that sub-class)

    - #### _declaredType

          protected final JavaType _declaredType

      Type property is declared to have, either in class definition or associated annotations.

    - #### _accessorMethod

          protected final Method _accessorMethod

      Accessor method used to get property value, for method-accessible properties. Null if and only if `_field` is null.

    - #### _field

          protected final Field _field

      Field that contains the property value for field-accessible properties. Null if and only if `_accessorMethod` is null.

    - #### _internalSettings

          protected HashMap<Object,Object> _internalSettings

    - #### _name

          protected final SerializedString _name

      Logical name of the property; will be used as the field name under which value for the property is written.

    - #### _cfgSerializationType

          protected final JavaType _cfgSerializationType

      Type to use for locating serializer; normally same as return type of the accessor method, but may be overridden by annotations.

    - #### _serializer

          protected final JsonSerializer<Object> _serializer

      Serializer to use for writing out the value: null if it can not be known statically; non-null if it can.

    - #### _dynamicSerializers

          protected PropertySerializerMap _dynamicSerializers

      In case serializer is not known statically (i.e. `_serializer` is null), we will use a lookup structure for storing dynamically resolved mapping from type(s) to serializer(s).
      Since:
        1.7

    - #### _suppressNulls

          protected final boolean _suppressNulls

      Flag to indicate that null values for this property are not to be written out. That is, if property has value null, no entry will be written

    - #### _suppressableValue

          protected final Object _suppressableValue

      Value that is considered default value of the property; used for default-value-suppression if enabled.

    - #### _includeInViews

          protected Class<?>[] _includeInViews

      Alternate set of property writers used when view-based filtering is available for the Bean.
      Since:
        1.4

    - #### _typeSerializer

          protected TypeSerializer _typeSerializer

      If property being serialized needs type information to be included this is the type serializer to use. Declared type (possibly augmented with annotations) of property is used for determining exact mechanism to use (compared to actual runtime type used for serializing actual state).

    - #### _nonTrivialBaseType

          protected JavaType _nonTrivialBaseType

      Base type of the property, if the declared type is "non-trivial"; meaning it is either a structured type (collection, map, array), or parametrized. Used to retain type information about contained type, which is mostly necessary if type metadata is to be included.
      Since:
        1.5

  - ### Constructor Detail

    - #### BeanPropertyWriter

          public BeanPropertyWriter(AnnotatedMember member,
                            Annotations contextAnnotations,
                            String name,
                            JavaType declaredType,
                            JsonSerializer<Object> ser,
                            TypeSerializer typeSer,
                            JavaType serType,
                            Method m,
                            Field f,
                            boolean suppressNulls,
                            Object suppressableValue)

    - #### BeanPropertyWriter

          public BeanPropertyWriter(AnnotatedMember member,
                            Annotations contextAnnotations,
                            SerializedString name,
                            JavaType declaredType,
                            JsonSerializer<Object> ser,
                            TypeSerializer typeSer,
                            JavaType serType,
                            Method m,
                            Field f,
                            boolean suppressNulls,
                            Object suppressableValue)

    - #### BeanPropertyWriter

          protected BeanPropertyWriter(BeanPropertyWriter base)

      "Copy constructor" to be used by filtering sub-classes

    - #### BeanPropertyWriter

          protected BeanPropertyWriter(BeanPropertyWriter base,
                            JsonSerializer<Object> ser)

      "Copy constructor" to be used by filtering sub-classes

  - ### Method Detail

    - #### withSerializer

          public BeanPropertyWriter withSerializer(JsonSerializer<Object> ser)

      Method that will construct and return a new writer that has same properties as this writer, but uses specified serializer instead of currently configured one (if any).

    - #### unwrappingWriter

          public BeanPropertyWriter unwrappingWriter()

      Method called create an instance that handles details of unwrapping contained value.
      Since:
        1.9

    - #### setViews

          public void setViews(Class<?>[] views)

      Method for defining which views to included value of this property in. If left undefined, will always be included; otherwise active view definition will be checked against definition list and value is only included if active view is one of defined views, or its sub-view (as defined by class/sub-class relationship).

    - #### setNonTrivialBaseType

          public void setNonTrivialBaseType(JavaType t)

      Method called to define type to consider as "non-trivial" basetype, needed for dynamic serialization resolution for complex (usually container) types
      Since:
        1.5

    - #### getName

          public String getName()

      Description copied from interface: `BeanProperty`
      Method to get logical name of the property
      Specified by:
        `getName` in interface `BeanProperty`
      Specified by:
        `getName` in interface `Named`

    - #### getType

          public JavaType getType()

      Description copied from interface: `BeanProperty`
      Method to get declared type of the property.
      Specified by:
        `getType` in interface `BeanProperty`

    - #### getAnnotation

          public <A extends Annotation> A getAnnotation(Class<A> acls)

      Description copied from interface: `BeanProperty`
      Method for finding annotation associated with this property; meaning annotation associated with one of entities used to access property.
      Specified by:
        `getAnnotation` in interface `BeanProperty`

    - #### getContextAnnotation

          public <A extends Annotation> A getContextAnnotation(Class<A> acls)

      Description copied from interface: `BeanProperty`
      Method for finding annotation associated with context of this property; usually class in which member is declared (or its subtype if processing subtype).
      Specified by:
        `getContextAnnotation` in interface `BeanProperty`

    - #### getMember

          public AnnotatedMember getMember()

      Description copied from interface: `BeanProperty`
      Method for accessing primary physical entity that represents the property; annotated field, method or constructor property.
      Specified by:
        `getMember` in interface `BeanProperty`

    - #### getInternalSetting

          public Object getInternalSetting(Object key)

      Method for accessing value of specified internal setting.
      Returns:
        Value of the setting, if any; null if none.
      Since:
        1.7

    - #### setInternalSetting

          public Object setInternalSetting(Object key,
                                  Object value)

      Method for setting specific internal setting to given value
      Returns:
        Old value of the setting, if any (null if none)
      Since:
        1.7

    - #### removeInternalSetting

          public Object removeInternalSetting(Object key)

      Method for removing entry for specified internal setting.
      Returns:
        Existing value of the setting, if any (null if none)
      Since:
        1.7

    - #### getSerializedName

          public SerializedString getSerializedName()

    - #### hasSerializer

          public boolean hasSerializer()

    - #### getSerializer

          public JsonSerializer<Object> getSerializer()

    - #### getSerializationType

          public JavaType getSerializationType()

    - #### getRawSerializationType

          public Class<?> getRawSerializationType()

    - #### getPropertyType

          public Class<?> getPropertyType()

    - #### getGenericPropertyType

          public Type getGenericPropertyType()

      Get the generic property type of this property writer.
      Returns:
        The property type, or null if not found.

    - #### getViews

          public Class<?>[] getViews()

    - #### serializeAsField

          public void serializeAsField(Object bean,
                              JsonGenerator jgen,
                              SerializerProvider prov)
                                throws Exception

      Method called to access property that this bean stands for, from within given bean, and to serialize it as a JSON Object field using appropriate serializer.
      Throws:
        `Exception`

    - #### _findAndAddDynamic

          protected JsonSerializer<Object> _findAndAddDynamic(PropertySerializerMap map,
                                                  Class<?> type,
                                                  SerializerProvider provider)
                                                       throws JsonMappingException

      Throws:
        `JsonMappingException`
      Since:
        1.7

    - #### get

          public final Object get(Object bean)
                           throws Exception

      Method that can be used to access value of the property this Object describes, from given bean instance.

      Note: method is final as it should not need to be overridden -- rather, calling method(s) (`serializeAsField(java.lang.Object, org.codehaus.jackson.JsonGenerator, org.codehaus.jackson.map.SerializerProvider)`) should be overridden to change the behavior

      Throws:
        `Exception`

    - #### _reportSelfReference

          protected void _reportSelfReference(Object bean)
                                       throws JsonMappingException

      Throws:
        `JsonMappingException`

    - #### toString

          public String toString()

      Overrides:
        `toString` in class `Object`