public class BeanPropertyWriter extends PropertyWriter implements Serializable
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.
BeanProperty.Bogus, BeanProperty.Std
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
parameterized.
|
protected JsonSerializer<Object> |
_nullSerializer
Serializer used for writing out null values, if any: if null, null values
are to be suppressed.
|
protected JsonSerializer<Object> |
_serializer
Serializer to use for writing out the value: null if it cannot 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
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 Object |
MARKER_FOR_EMPTY
Marker object used to indicate "do not serialize if empty"
|
_aliases, _metadata
EMPTY_FORMAT, EMPTY_INCLUDE
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,
Object suppressableValue)
Deprecated.
|
|
BeanPropertyWriter(BeanPropertyDefinition propDef,
AnnotatedMember member,
Annotations contextAnnotations,
JavaType declaredType,
JsonSerializer<?> ser,
TypeSerializer typeSer,
JavaType serType,
boolean suppressNulls,
Object suppressableValue,
Class<?>[] includeInViews) |
protected |
BeanPropertyWriter(BeanPropertyWriter base)
"Copy constructor" to be used by filtering sub-classes
|
protected |
BeanPropertyWriter(BeanPropertyWriter base,
PropertyName name) |
protected |
BeanPropertyWriter(BeanPropertyWriter base,
SerializedString name) |
Modifier and Type | Method and Description |
---|---|
protected void |
_depositSchemaProperty(ObjectNode propertiesNode,
JsonNode schemaNode) |
protected JsonSerializer<Object> |
_findAndAddDynamic(PropertySerializerMap map,
Class<?> type,
SerializerProvider provider) |
protected boolean |
_handleSelfReference(Object bean,
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<Object> nullSer)
Method called to assign null value serializer for property
|
void |
assignSerializer(JsonSerializer<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.
|
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> |
getAnnotation(Class<A> acls)
Method for accessing annotations directly declared for property that this
writer is associated with.
|
<A extends Annotation> |
getContextAnnotation(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).
|
Type |
getGenericPropertyType()
Deprecated.
Since 2.7, to be removed from 2.9, use
getType() instead. |
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()
Deprecated.
Since 2.7, to be removed from 2.9, use
getType() instead. |
Class<?> |
getRawSerializationType()
Deprecated.
|
JavaType |
getSerializationType() |
SerializableString |
getSerializedName() |
JsonSerializer<Object> |
getSerializer() |
JavaType |
getType()
Method to get declared type of the property.
|
TypeSerializer |
getTypeSerializer() |
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).
|
Object |
removeInternalSetting(Object key)
Method for removing entry for specified internal setting.
|
BeanPropertyWriter |
rename(NameTransformer transformer) |
void |
serializeAsElement(Object bean,
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(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.
|
void |
serializeAsOmittedField(Object bean,
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(Object bean,
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.
|
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
|
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.
|
findAnnotation
findAliases, findFormatOverrides, findPropertyFormat, findPropertyInclusion, getMetadata, isRequired, isVirtual
public static final Object MARKER_FOR_EMPTY
protected final SerializedString _name
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.
protected final PropertyName _wrapperName
protected final JavaType _declaredType
protected final JavaType _cfgSerializationType
protected JavaType _nonTrivialBaseType
protected final transient Annotations _contextAnnotations
NOTE: transient just to support JDK serializability; Annotations do not serialize. At all.
protected final AnnotatedMember _member
protected transient Method _accessorMethod
_field
is null.
`transient` (and non-final) only to support JDK serializability.
protected transient Field _field
_accessorMethod
is null.
`transient` (and non-final) only to support JDK serializability.
protected JsonSerializer<Object> _serializer
protected JsonSerializer<Object> _nullSerializer
protected TypeSerializer _typeSerializer
protected transient PropertySerializerMap _dynamicSerializers
_serializer
is null), we will use a lookup structure for storing dynamically resolved
mapping from type(s) to serializer(s).protected final boolean _suppressNulls
_nullSerializer
.protected final Object _suppressableValue
protected final Class<?>[] _includeInViews
public BeanPropertyWriter(BeanPropertyDefinition propDef, AnnotatedMember member, Annotations contextAnnotations, JavaType declaredType, JsonSerializer<?> ser, TypeSerializer typeSer, JavaType serType, boolean suppressNulls, Object suppressableValue, Class<?>[] includeInViews)
@Deprecated public BeanPropertyWriter(BeanPropertyDefinition propDef, AnnotatedMember member, Annotations contextAnnotations, JavaType declaredType, JsonSerializer<?> ser, TypeSerializer typeSer, JavaType serType, boolean suppressNulls, Object suppressableValue)
protected BeanPropertyWriter()
protected BeanPropertyWriter(BeanPropertyWriter base)
protected BeanPropertyWriter(BeanPropertyWriter base, PropertyName name)
protected BeanPropertyWriter(BeanPropertyWriter base, SerializedString name)
public BeanPropertyWriter rename(NameTransformer transformer)
protected BeanPropertyWriter _new(PropertyName newName)
public void assignTypeSerializer(TypeSerializer typeSer)
public void assignSerializer(JsonSerializer<Object> ser)
public void assignNullSerializer(JsonSerializer<Object> nullSer)
public BeanPropertyWriter unwrappingWriter(NameTransformer unwrapper)
public void setNonTrivialBaseType(JavaType t)
public void fixAccess(SerializationConfig config)
public String getName()
BeanProperty
getName
in interface BeanProperty
getName
in interface Named
getName
in class PropertyWriter
public PropertyName getFullName()
BeanProperty
getFullName
in interface BeanProperty
getFullName
in class PropertyWriter
public JavaType getType()
BeanProperty
getType
in interface BeanProperty
public PropertyName getWrapperName()
BeanProperty
getWrapperName
in interface BeanProperty
public <A extends Annotation> A getAnnotation(Class<A> acls)
PropertyWriter
getAnnotation
in interface BeanProperty
getAnnotation
in class PropertyWriter
public <A extends Annotation> A getContextAnnotation(Class<A> acls)
PropertyWriter
getContextAnnotation
in interface BeanProperty
getContextAnnotation
in class PropertyWriter
public AnnotatedMember getMember()
BeanProperty
getMember
in interface BeanProperty
protected void _depositSchemaProperty(ObjectNode propertiesNode, JsonNode schemaNode)
public Object getInternalSetting(Object key)
public Object setInternalSetting(Object key, Object value)
public Object removeInternalSetting(Object key)
public SerializableString getSerializedName()
public boolean hasSerializer()
public boolean hasNullSerializer()
public TypeSerializer getTypeSerializer()
public boolean isUnwrapping()
Default implementation simply returns false.
public boolean willSuppressNulls()
public boolean wouldConflictWithName(PropertyName name)
public JsonSerializer<Object> getSerializer()
public JavaType getSerializationType()
@Deprecated public Class<?> getRawSerializationType()
@Deprecated public Class<?> getPropertyType()
getType()
instead.@Deprecated public Type getGenericPropertyType()
getType()
instead.public Class<?>[] getViews()
public void serializeAsField(Object bean, JsonGenerator gen, SerializerProvider prov) throws Exception
serializeAsField
in class PropertyWriter
Exception
public void serializeAsOmittedField(Object bean, JsonGenerator gen, SerializerProvider prov) throws Exception
serializeAsOmittedField
in class PropertyWriter
Exception
public void serializeAsElement(Object bean, JsonGenerator gen, SerializerProvider prov) throws Exception
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.serializeAsElement
in class PropertyWriter
Exception
public void serializeAsPlaceholder(Object bean, JsonGenerator gen, SerializerProvider prov) throws Exception
serializeAsPlaceholder
in class PropertyWriter
Exception
public void depositSchemaProperty(JsonObjectFormatVisitor v, SerializerProvider provider) throws JsonMappingException
PropertyWriter
depositSchemaProperty
in interface BeanProperty
depositSchemaProperty
in class PropertyWriter
v
- Visitor to used as the callback handlerJsonMappingException
@Deprecated public void depositSchemaProperty(ObjectNode propertiesNode, SerializerProvider provider) throws JsonMappingException
BeanPropertyWriter
in the
given ObjectNode
. Otherwise, add the default schema
JsonNode
in place of the writer's outputdepositSchemaProperty
in class PropertyWriter
propertiesNode
- Node which the given property would exist withinprovider
- Provider that can be used for accessing dynamic aspects of
serialization processingJsonMappingException
protected JsonSerializer<Object> _findAndAddDynamic(PropertySerializerMap map, Class<?> type, SerializerProvider provider) throws JsonMappingException
JsonMappingException
public final Object get(Object bean) throws Exception
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
Exception
protected boolean _handleSelfReference(Object bean, JsonGenerator gen, SerializerProvider prov, JsonSerializer<?> ser) throws IOException
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.
JsonMappingException
if there
is no way handle itIOException
Copyright © 2008–2020 FasterXML. All rights reserved.