com.fasterxml.jackson.databind.ser

## Class VirtualBeanPropertyWriter

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

All Implemented Interfaces:
  BeanProperty, Named

Direct Known Subclasses:
  AttributePropertyWriter

    public abstract class VirtualBeanPropertyWriter
    extends BeanPropertyWriter

`BeanPropertyWriter` implementation used with `JsonAppend` to add "virtual" properties in addition to regular ones.

Since:
  2.5
See Also:
  `AttributePropertyWriter`

### Nested Class Summary

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

`BeanProperty.Std`

### Field Summary

### Fields inherited from class com.fasterxml.jackson.databind.ser.BeanPropertyWriter

`_accessorMethod, _cfgSerializationType, _contextAnnotations, _declaredType, _dynamicSerializers, _field, _format, _includeInViews, _internalSettings, _member, _metadata, _name, _nonTrivialBaseType, _nullSerializer, _serializer, _suppressableValue, _suppressNulls, _typeSerializer, _wrapperName, MARKER_FOR_EMPTY, NO_FORMAT`

### Constructor Summary

Constructors

`protected`

`VirtualBeanPropertyWriter()`
Constructor that may be used by sub-classes for constructing a "blue-print" instance; one that will only become (or create) actual usable instance when its `withConfig(com.fasterxml.jackson.databind.cfg.MapperConfig<?>, com.fasterxml.jackson.databind.introspect.AnnotatedClass, com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition, com.fasterxml.jackson.databind.JavaType)` method is called.

`protected` `VirtualBeanPropertyWriter(BeanPropertyDefinition propDef, Annotations contextAnnotations, JavaType declaredType)` Constructor used by most sub-types.
`protected` `VirtualBeanPropertyWriter(BeanPropertyDefinition propDef, Annotations contextAnnotations, JavaType declaredType, JsonSerializer<?> ser, TypeSerializer typeSer, JavaType serType, JsonInclude.Include inclusion)` Pass-through constructor that may be used by sub-classes that want full control over implementation.
`protected` `VirtualBeanPropertyWriter(VirtualBeanPropertyWriter base)`
`protected` `VirtualBeanPropertyWriter(VirtualBeanPropertyWriter base, PropertyName name)`

### Method Summary

Methods
`protected static Object` `_suppressableValue(JsonInclude.Include inclusion)`
`protected static boolean` `_suppressNulls(JsonInclude.Include inclusion)`
`Type` `getGenericPropertyType()` Get the generic property type of this property writer.
`Class<?>` `getPropertyType()`
`boolean` `isVirtual()` Note: will be defined in `BeanProperty`; as of now is not yet.
`void` `serializeAsElement(Object bean, JsonGenerator gen, SerializerProvider prov)` Alternative to `BeanPropertyWriter.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(Object bean, 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.
`protected abstract Object` `value(Object bean, JsonGenerator jgen, SerializerProvider prov)` Method called to figure out the value to serialize.
`abstract VirtualBeanPropertyWriter` `withConfig(MapperConfig<?> config, AnnotatedClass declaringClass, BeanPropertyDefinition propDef, JavaType type)` Contextualization method called on a newly constructed virtual bean property.

### Methods inherited from class com.fasterxml.jackson.databind.ser.BeanPropertyWriter

`_depositSchemaProperty, _findAndAddDynamic, _handleSelfReference, assignNullSerializer, assignSerializer, assignTypeSerializer, depositSchemaProperty, depositSchemaProperty, findFormatOverrides, get, getAnnotation, getContextAnnotation, getFullName, getInternalSetting, getMember, getMetadata, getName, getRawSerializationType, getSerializationType, getSerializedName, getSerializer, getType, getTypeSerializer, getViews, getWrapperName, hasNullSerializer, hasSerializer, isRequired, isUnwrapping, removeInternalSetting, rename, serializeAsOmittedField, serializeAsPlaceholder, setInternalSetting, setNonTrivialBaseType, toString, unwrappingWriter, willSuppressNulls, wouldConflictWithName`

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

`findAnnotation`

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

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

### Constructor Detail

#### VirtualBeanPropertyWriter

    protected VirtualBeanPropertyWriter(BeanPropertyDefinition propDef,
                             Annotations contextAnnotations,
                             JavaType declaredType)

Constructor used by most sub-types.

#### VirtualBeanPropertyWriter

    protected VirtualBeanPropertyWriter()

Constructor that may be used by sub-classes for constructing a "blue-print" instance; one that will only become (or create) actual usable instance when its `withConfig(com.fasterxml.jackson.databind.cfg.MapperConfig<?>, com.fasterxml.jackson.databind.introspect.AnnotatedClass, com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition, com.fasterxml.jackson.databind.JavaType)` method is called.

#### VirtualBeanPropertyWriter

    protected VirtualBeanPropertyWriter(BeanPropertyDefinition propDef,
                             Annotations contextAnnotations,
                             JavaType declaredType,
                             JsonSerializer<?> ser,
                             TypeSerializer typeSer,
                             JavaType serType,
                             JsonInclude.Include inclusion)

Pass-through constructor that may be used by sub-classes that want full control over implementation.

#### VirtualBeanPropertyWriter

    protected VirtualBeanPropertyWriter(VirtualBeanPropertyWriter base)

#### VirtualBeanPropertyWriter

    protected VirtualBeanPropertyWriter(VirtualBeanPropertyWriter base,
                             PropertyName name)

### Method Detail

#### _suppressNulls

    protected static boolean _suppressNulls(JsonInclude.Include inclusion)

#### _suppressableValue

    protected static Object _suppressableValue(JsonInclude.Include inclusion)

#### isVirtual

    public boolean isVirtual()

Description copied from class: `BeanPropertyWriter`
Note: will be defined in `BeanProperty`; as of now is not yet.

TODO: move to `BeanProperty` in near future, once all standard implementations define it.

Overrides:
  `isVirtual` in class `BeanPropertyWriter`

#### getPropertyType

    public Class<?> getPropertyType()

Overrides:
  `getPropertyType` in class `BeanPropertyWriter`

#### getGenericPropertyType

    public Type getGenericPropertyType()

Description copied from class: `BeanPropertyWriter`
Get the generic property type of this property writer.

Overrides:
  `getGenericPropertyType` in class `BeanPropertyWriter`
Returns:
  The property type, or null if not found.

#### value

    protected abstract Object value(Object bean,
               JsonGenerator jgen,
               SerializerProvider prov)
                             throws Exception

Method called to figure out the value to serialize. For simple sub-types (such as `AttributePropertyWriter`) this may be one of few methods to define, although more advanced implementations may choose to not even use this method (by overriding `serializeAsField(java.lang.Object, com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.databind.SerializerProvider)`) and define a bogus implementation.

Throws:
  `Exception`

#### withConfig

    public abstract VirtualBeanPropertyWriter withConfig(MapperConfig<?> config,
                                       AnnotatedClass declaringClass,
                                       BeanPropertyDefinition propDef,
                                       JavaType type)

Contextualization method called on a newly constructed virtual bean property. Usually a new intance needs to be created due to finality of some of configuration members; otherwise while recommended, creating a new instance is not strictly-speaking mandatory because calls are made in thread-safe manner, as part of initialization before use.

Parameters:
  `config` - Currenct configuration; guaranteed to be `SerializationConfig` (just not typed since caller does not have dependency to serialization-specific types)
  `declaringClass` - Class that contains this property writer
  `propDef` - Nominal property definition to use
  `type` - Declared type for the property

#### serializeAsField

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

Description copied from class: `BeanPropertyWriter`
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.

Overrides:
  `serializeAsField` in class `BeanPropertyWriter`
Throws:
  `Exception`

#### serializeAsElement

    public void serializeAsElement(Object bean,
                          JsonGenerator gen,
                          SerializerProvider prov)
                            throws Exception

Description copied from class: `BeanPropertyWriter`
Alternative to `BeanPropertyWriter.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.

Overrides:
  `serializeAsElement` in class `BeanPropertyWriter`
Throws:
  `Exception`