BeanPropertyWriter
Date: 2016-12-04

com.fasterxml.jackson.databind.ser

## Class BeanPropertyWriter

- java.lang.Object
- - com.fasterxml.jackson.databind.introspect.ConcreteBeanPropertyBase
  - - com.fasterxml.jackson.databind.ser.PropertyWriter
    - - com.fasterxml.jackson.databind.ser.BeanPropertyWriter

- All Implemented Interfaces:
    BeanProperty, Named, java.io.Serializable
  Direct Known Subclasses:
    UnwrappingBeanPropertyWriter, VirtualBeanPropertyWriter

      public class BeanPropertyWriter
      extends PropertyWriter
      implements java.io.Serializable

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

  Note that current design tries to keep instances immutable (semi-functional style); mostly because these instances are exposed to application code and this is to reduce likelihood of data corruption and synchronization issues.

  See Also:
    Serialized Form

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from interface com.fasterxml.jackson.databind.BeanProperty

      `BeanProperty.Std`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected java.lang.reflect.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 java.lang.reflect.Field` | `_field` Field that contains the property value for field-accessible properties.
    `protected java.lang.Class<?>[]` | `_includeInViews` Alternate set of property writers used when view-based filtering is available for the Bean.
    `protected java.util.HashMap<java.lang.Object,java.lang.Object>` | `_internalSettings`
    `protected AnnotatedMember` | `_member` Member (field, method) that represents property and allows access to associated annotations.
    `protected com.fasterxml.jackson.core.io.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 parameterized.
    `protected JsonSerializer<java.lang.Object>` | `_nullSerializer` Serializer used for writing out null values, if any: if null, null values are to be suppressed.
    `protected JsonSerializer<java.lang.Object>` | `_serializer` Serializer to use for writing out the value: null if it can not be known statically; non-null if it can.
    `protected java.lang.Object` | `_suppressableValue` Value that is considered default value of the property; used for default-value-suppression if enabled.
    `protected boolean` | `_suppressNulls` Whether null values are to be suppressed (nothing written out if value is null) or not.
    `protected TypeSerializer` | `_typeSerializer` If property being serialized needs type information to be included this is the type serializer to use.
    `protected PropertyName` | `_wrapperName` Wrapper name to use for this element, if any
    `static java.lang.Object` | `MARKER_FOR_EMPTY` Marker object used to indicate "do not serialize if empty"

    - ### Fields inherited from class com.fasterxml.jackson.databind.introspect.ConcreteBeanPropertyBase

      `_metadata, _propertyFormat`

    - ### Fields inherited from interface com.fasterxml.jackson.databind.BeanProperty

      `EMPTY_FORMAT, EMPTY_INCLUDE`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `BeanPropertyWriter()` Constructor that may be of use to virtual properties, when there is need for the zero-arg ("default") constructor, and actual initialization is done after constructor call.
    `` | `BeanPropertyWriter(BeanPropertyDefinition propDef, AnnotatedMember member, Annotations contextAnnotations, JavaType declaredType, JsonSerializer<?> ser, TypeSerializer typeSer, JavaType serType, boolean suppressNulls, java.lang.Object suppressableValue)`
    `protected` | `BeanPropertyWriter(BeanPropertyWriter base)` "Copy constructor" to be used by filtering sub-classes
    `protected` | `BeanPropertyWriter(BeanPropertyWriter base, PropertyName name)`
    `protected` | `BeanPropertyWriter(BeanPropertyWriter base, com.fasterxml.jackson.core.io.SerializedString name)`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected void` | `_depositSchemaProperty(ObjectNode propertiesNode, JsonNode schemaNode)`
    `protected JsonSerializer<java.lang.Object>` | `_findAndAddDynamic(PropertySerializerMap map, java.lang.Class<?> type, SerializerProvider provider)`
    `protected boolean` | `_handleSelfReference(java.lang.Object bean, com.fasterxml.jackson.core.JsonGenerator gen, SerializerProvider prov, JsonSerializer<?> ser)` Method called to handle a direct self-reference through this property.
    `protected BeanPropertyWriter` | `_new(PropertyName newName)` Overridable factory method used by sub-classes
    `void` | `assignNullSerializer(JsonSerializer<java.lang.Object> nullSer)` Method called to assign null value serializer for property
    `void` | `assignSerializer(JsonSerializer<java.lang.Object> ser)` Method called to assign value serializer for property
    `void` | `assignTypeSerializer(TypeSerializer typeSer)` Method called to set, reset or clear the configured type serializer for property.
    `void` | `depositSchemaProperty(JsonObjectFormatVisitor v, SerializerProvider provider)` Traversal method used for things like JSON Schema generation, or POJO introspection.
    `void` | `depositSchemaProperty(ObjectNode propertiesNode, SerializerProvider provider)` Deprecated.
    `void` | `fixAccess(SerializationConfig config)` Method called to ensure that the mutator has proper access rights to be called, as per configuration.
    `java.lang.Object` | `get(java.lang.Object bean)` Method that can be used to access value of the property this Object describes, from given bean instance.
    `<A extends java.lang.annotation.Annotation> A` | `getAnnotation(java.lang.Class<A> acls)` Method for accessing annotations directly declared for property that this writer is associated with.
    `<A extends java.lang.annotation.Annotation> A` | `getContextAnnotation(java.lang.Class<A> acls)` Method for accessing annotations declared in context of the property that this writer is associated with; usually this means annotations on enclosing class for property.
    `PropertyName` | `getFullName()` Method for getting full name definition, including possible format-specific additional properties (such as namespace when using XML backend).
    `java.lang.reflect.Type` | `getGenericPropertyType()` Deprecated. Since 2.7, to be removed from 2.9, use `getType()` instead.
    `java.lang.Object` | `getInternalSetting(java.lang.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.
    `java.lang.String` | `getName()` Method to get logical name of the property
    `java.lang.Class<?>` | `getPropertyType()` Deprecated. Since 2.7, to be removed from 2.9, use `getType()` instead.
    `java.lang.Class<?>` | `getRawSerializationType()`
    `JavaType` | `getSerializationType()`
    `com.fasterxml.jackson.core.SerializableString` | `getSerializedName()`
    `JsonSerializer<java.lang.Object>` | `getSerializer()`
    `JavaType` | `getType()` Method to get declared type of the property.
    `TypeSerializer` | `getTypeSerializer()`
    `java.lang.Class<?>[]` | `getViews()`
    `PropertyName` | `getWrapperName()` If property is indicated to be wrapped, name of wrapper element to use.
    `boolean` | `hasNullSerializer()`
    `boolean` | `hasSerializer()`
    `boolean` | `isUnwrapping()` Accessor that will return true if this bean property has to support "unwrapping"; ability to replace POJO structural wrapping with optional name prefix and/or suffix (or in some cases, just removal of wrapper name).
    `java.lang.Object` | `removeInternalSetting(java.lang.Object key)` Method for removing entry for specified internal setting.
    `BeanPropertyWriter` | `rename(NameTransformer transformer)`
    `void` | `serializeAsElement(java.lang.Object bean, com.fasterxml.jackson.core.JsonGenerator gen, SerializerProvider prov)` Alternative to `serializeAsField(java.lang.Object, com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.databind.SerializerProvider)` that is used when a POJO is serialized as JSON Array; the difference is that no field names are written.
    `void` | `serializeAsField(java.lang.Object bean, com.fasterxml.jackson.core.JsonGenerator gen, 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.
    `void` | `serializeAsOmittedField(java.lang.Object bean, com.fasterxml.jackson.core.JsonGenerator gen, SerializerProvider prov)` Method called to indicate that serialization of a field was omitted due to filtering, in cases where backend data format does not allow basic omission.
    `void` | `serializeAsPlaceholder(java.lang.Object bean, com.fasterxml.jackson.core.JsonGenerator gen, SerializerProvider prov)` Method called to serialize a placeholder used in tabular output when real value is not to be included (is filtered out), but when we need an entry so that field indexes will not be off.
    `java.lang.Object` | `setInternalSetting(java.lang.Object key, java.lang.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
    `java.lang.String` | `toString()`
    `BeanPropertyWriter` | `unwrappingWriter(NameTransformer unwrapper)` Method called create an instance that handles details of unwrapping contained value.
    `boolean` | `willSuppressNulls()`
    `boolean` | `wouldConflictWithName(PropertyName name)` Method called to check to see if this property has a name that would conflict with a given name.

    - ### Methods inherited from class com.fasterxml.jackson.databind.ser.PropertyWriter

      `findAnnotation`

    - ### Methods inherited from class com.fasterxml.jackson.databind.introspect.ConcreteBeanPropertyBase

      `findFormatOverrides, findPropertyFormat, findPropertyInclusion, getMetadata, isRequired, isVirtual`

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

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

- - ### Field Detail

    - #### MARKER_FOR_EMPTY

          public static final java.lang.Object MARKER_FOR_EMPTY

      Marker object used to indicate "do not serialize if empty"

    - #### _name

          protected final com.fasterxml.jackson.core.io.SerializedString _name

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

      NOTE: do NOT change name of this field; it is accessed by Afterburner module (until 2.4; not directly from 2.5) ALSO NOTE: ... and while it really ought to be `SerializableString`, changing that is also binary-incompatible change. So nope.

    - #### _wrapperName

          protected final PropertyName _wrapperName

      Wrapper name to use for this element, if any
      Since:
        2.2

    - #### _declaredType

          protected final JavaType _declaredType

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

    - #### _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.

    - #### _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 parameterized. Used to retain type information about contained type, which is mostly necessary if type meta-data is to be included.

    - #### _contextAnnotations

          protected final transient Annotations _contextAnnotations

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

      NOTE: transient just to support JDK serializability; Annotations do not serialize. At all.

    - #### _member

          protected final AnnotatedMember _member

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

    - #### _accessorMethod

          protected transient java.lang.reflect.Method _accessorMethod

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

      `transient` (and non-final) only to support JDK serializability.

    - #### _field

          protected transient java.lang.reflect.Field _field

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

      `transient` (and non-final) only to support JDK serializability.

    - #### _serializer

          protected JsonSerializer<java.lang.Object> _serializer

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

    - #### _nullSerializer

          protected JsonSerializer<java.lang.Object> _nullSerializer

      Serializer used for writing out null values, if any: if null, null values are to be suppressed.

    - #### _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).

    - #### _dynamicSerializers

          protected transient 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).

    - #### _suppressNulls

          protected final boolean _suppressNulls

      Whether null values are to be suppressed (nothing written out if value is null) or not. Note that this is a configuration value during construction, and actual handling relies on setting (or not) of `_nullSerializer`.

    - #### _suppressableValue

          protected final java.lang.Object _suppressableValue

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

    - #### _includeInViews

          protected final java.lang.Class<?>[] _includeInViews

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

    - #### _internalSettings

          protected transient java.util.HashMap<java.lang.Object,java.lang.Object> _internalSettings

  - ### Constructor Detail

    - #### BeanPropertyWriter

          public BeanPropertyWriter(BeanPropertyDefinition propDef,
                            AnnotatedMember member,
                            Annotations contextAnnotations,
                            JavaType declaredType,
                            JsonSerializer<?> ser,
                            TypeSerializer typeSer,
                            JavaType serType,
                            boolean suppressNulls,
                            java.lang.Object suppressableValue)

    - #### BeanPropertyWriter

          protected BeanPropertyWriter()

      Constructor that may be of use to virtual properties, when there is need for the zero-arg ("default") constructor, and actual initialization is done after constructor call.
      Since:
        2.5

    - #### BeanPropertyWriter

          protected BeanPropertyWriter(BeanPropertyWriter base)

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

    - #### BeanPropertyWriter

          protected BeanPropertyWriter(BeanPropertyWriter base,
                            PropertyName name)

      Since:
        2.5

    - #### BeanPropertyWriter

          protected BeanPropertyWriter(BeanPropertyWriter base,
                            com.fasterxml.jackson.core.io.SerializedString name)

  - ### Method Detail

    - #### rename

          public BeanPropertyWriter rename(NameTransformer transformer)

    - #### _new

          protected BeanPropertyWriter _new(PropertyName newName)

      Overridable factory method used by sub-classes
      Since:
        2.6

    - #### assignTypeSerializer

          public void assignTypeSerializer(TypeSerializer typeSer)

      Method called to set, reset or clear the configured type serializer for property.
      Since:
        2.6

    - #### assignSerializer

          public void assignSerializer(JsonSerializer<java.lang.Object> ser)

      Method called to assign value serializer for property

    - #### assignNullSerializer

          public void assignNullSerializer(JsonSerializer<java.lang.Object> nullSer)

      Method called to assign null value serializer for property

    - #### unwrappingWriter

          public BeanPropertyWriter unwrappingWriter(NameTransformer unwrapper)

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

    - #### 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

    - #### fixAccess

          public void fixAccess(SerializationConfig config)

      Method called to ensure that the mutator has proper access rights to be called, as per configuration. Overridden by implementations that have mutators that require access, fields and setters.
      Since:
        2.8.3

    - #### getName

          public java.lang.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`
      Specified by:
        `getName` in class `PropertyWriter`

    - #### getFullName

          public PropertyName getFullName()

      Description copied from interface: `BeanProperty`
      Method for getting full name definition, including possible format-specific additional properties (such as namespace when using XML backend).
      Specified by:
        `getFullName` in interface `BeanProperty`
      Specified by:
        `getFullName` in class `PropertyWriter`

    - #### getType

          public JavaType getType()

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

    - #### getWrapperName

          public PropertyName getWrapperName()

      Description copied from interface: `BeanProperty`
      If property is indicated to be wrapped, name of wrapper element to use.
      Specified by:
        `getWrapperName` in interface `BeanProperty`

    - #### getAnnotation

          public <A extends java.lang.annotation.Annotation> A getAnnotation(java.lang.Class<A> acls)

      Description copied from class: `PropertyWriter`
      Method for accessing annotations directly declared for property that this writer is associated with.
      Specified by:
        `getAnnotation` in interface `BeanProperty`
      Specified by:
        `getAnnotation` in class `PropertyWriter`

    - #### getContextAnnotation

          public <A extends java.lang.annotation.Annotation> A getContextAnnotation(java.lang.Class<A> acls)

      Description copied from class: `PropertyWriter`
      Method for accessing annotations declared in context of the property that this writer is associated with; usually this means annotations on enclosing class for property.
      Specified by:
        `getContextAnnotation` in interface `BeanProperty`
      Specified by:
        `getContextAnnotation` in class `PropertyWriter`

    - #### 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`

    - #### _depositSchemaProperty

          protected void _depositSchemaProperty(ObjectNode propertiesNode,
                                    JsonNode schemaNode)

    - #### getInternalSetting

          public java.lang.Object getInternalSetting(java.lang.Object key)

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

    - #### setInternalSetting

          public java.lang.Object setInternalSetting(java.lang.Object key,
                                            java.lang.Object value)

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

    - #### removeInternalSetting

          public java.lang.Object removeInternalSetting(java.lang.Object key)

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

    - #### getSerializedName

          public com.fasterxml.jackson.core.SerializableString getSerializedName()

    - #### hasSerializer

          public boolean hasSerializer()

    - #### hasNullSerializer

          public boolean hasNullSerializer()

    - #### getTypeSerializer

          public TypeSerializer getTypeSerializer()

      Since:
        2.6

    - #### isUnwrapping

          public boolean isUnwrapping()

      Accessor that will return true if this bean property has to support "unwrapping"; ability to replace POJO structural wrapping with optional name prefix and/or suffix (or in some cases, just removal of wrapper name).

      Default implementation simply returns false.

      Since:
        2.3

    - #### willSuppressNulls

          public boolean willSuppressNulls()

    - #### wouldConflictWithName

          public boolean wouldConflictWithName(PropertyName name)

      Method called to check to see if this property has a name that would conflict with a given name.
      Since:
        2.6

    - #### getSerializer

          public JsonSerializer<java.lang.Object> getSerializer()

    - #### getSerializationType

          public JavaType getSerializationType()

    - #### getRawSerializationType

          public java.lang.Class<?> getRawSerializationType()

    - #### getPropertyType

          @Deprecated
          public java.lang.Class<?> getPropertyType()

      Deprecated. Since 2.7, to be removed from 2.9, use `getType()` instead.

    - #### getGenericPropertyType

          @Deprecated
          public java.lang.reflect.Type getGenericPropertyType()

      Deprecated. Since 2.7, to be removed from 2.9, use `getType()` instead.
      Get the generic property type of this property writer.
      Returns:
        The property type, or null if not found.

    - #### getViews

          public java.lang.Class<?>[] getViews()

    - #### serializeAsField

          public void serializeAsField(java.lang.Object bean,
                              com.fasterxml.jackson.core.JsonGenerator gen,
                              SerializerProvider prov)
                                throws java.lang.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.
      Specified by:
        `serializeAsField` in class `PropertyWriter`
      Throws:
        `java.lang.Exception`

    - #### serializeAsOmittedField

          public void serializeAsOmittedField(java.lang.Object bean,
                                     com.fasterxml.jackson.core.JsonGenerator gen,
                                     SerializerProvider prov)
                                       throws java.lang.Exception

      Method called to indicate that serialization of a field was omitted due to filtering, in cases where backend data format does not allow basic omission.
      Specified by:
        `serializeAsOmittedField` in class `PropertyWriter`
      Throws:
        `java.lang.Exception`
      Since:
        2.3

    - #### serializeAsElement

          public void serializeAsElement(java.lang.Object bean,
                                com.fasterxml.jackson.core.JsonGenerator gen,
                                SerializerProvider prov)
                                  throws java.lang.Exception

      Alternative to `serializeAsField(java.lang.Object, com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.databind.SerializerProvider)` that is used when a POJO is serialized as JSON Array; the difference is that no field names are written.
      Specified by:
        `serializeAsElement` in class `PropertyWriter`
      Throws:
        `java.lang.Exception`
      Since:
        2.3

    - #### serializeAsPlaceholder

          public void serializeAsPlaceholder(java.lang.Object bean,
                                    com.fasterxml.jackson.core.JsonGenerator gen,
                                    SerializerProvider prov)
                                      throws java.lang.Exception

      Method called to serialize a placeholder used in tabular output when real value is not to be included (is filtered out), but when we need an entry so that field indexes will not be off. Typically this should output null or empty String, depending on datatype.
      Specified by:
        `serializeAsPlaceholder` in class `PropertyWriter`
      Throws:
        `java.lang.Exception`
      Since:
        2.1

    - #### depositSchemaProperty

          public void depositSchemaProperty(JsonObjectFormatVisitor v,
                                   SerializerProvider provider)
                                     throws JsonMappingException

      Description copied from class: `PropertyWriter`
      Traversal method used for things like JSON Schema generation, or POJO introspection.
      Specified by:
        `depositSchemaProperty` in interface `BeanProperty`
      Specified by:
        `depositSchemaProperty` in class `PropertyWriter`
      Parameters:
        `v` - Visitor to used as the callback handler
      Throws:
        `JsonMappingException`

    - #### depositSchemaProperty

          @Deprecated
          public void depositSchemaProperty(ObjectNode propertiesNode,
                                              SerializerProvider provider)
                                     throws JsonMappingException

      Deprecated.
      Attempt to add the output of the given `BeanPropertyWriter` in the given `ObjectNode`. Otherwise, add the default schema `JsonNode` in place of the writer's output
      Specified by:
        `depositSchemaProperty` in class `PropertyWriter`
      Parameters:
        `propertiesNode` - Node which the given property would exist within
        `provider` - Provider that can be used for accessing dynamic aspects of serialization processing
      Throws:
        `JsonMappingException`

    - #### _findAndAddDynamic

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

      Throws:
        `JsonMappingException`

    - #### get

          public final java.lang.Object get(java.lang.Object bean)
                                     throws java.lang.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, com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.databind.SerializerProvider)`) should be overridden to change the behavior

      Throws:
        `java.lang.Exception`

    - #### _handleSelfReference

          protected boolean _handleSelfReference(java.lang.Object bean,
                                     com.fasterxml.jackson.core.JsonGenerator gen,
                                     SerializerProvider prov,
                                     JsonSerializer<?> ser)
                                          throws JsonMappingException

      Method called to handle a direct self-reference through this property. Method can choose to indicate an error by throwing `JsonMappingException`; fully handle serialization (and return true); or indicate that it should be serialized normally (return false).

      Default implementation will throw `JsonMappingException` if `SerializationFeature.FAIL_ON_SELF_REFERENCES` is enabled; or return `false` if it is disabled.

      Returns:
        True if method fully handled self-referential value; false if not (caller is to handle it) or `JsonMappingException` if there is no way handle it
      Throws:
        `JsonMappingException`

    - #### toString

          public java.lang.String toString()

      Overrides:
        `toString` in class `java.lang.Object`