public class BeanPropertyWriter extends PropertyWriter implements BeanProperty
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.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 PropertyMetadata |
_metadata
Additional information about property
|
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 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
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"
|
Modifier | Constructor and Description |
---|---|
|
BeanPropertyWriter(BeanPropertyDefinition propDef,
AnnotatedMember member,
Annotations contextAnnotations,
JavaType declaredType,
JsonSerializer<?> ser,
TypeSerializer typeSer,
JavaType serType,
boolean suppressNulls,
Object suppressableValue) |
protected |
BeanPropertyWriter(BeanPropertyWriter base)
"Copy constructor" to be used by filtering sub-classes
|
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 jgen,
SerializerProvider prov,
JsonSerializer<?> ser)
Method called to handle a direct self-reference through this property.
|
protected void |
_handleSelfReference(Object bean,
JsonSerializer<?> ser)
Deprecated.
Since 2.3 Use overloaded variants
|
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 |
depositSchemaProperty(JsonObjectFormatVisitor objectVisitor)
Traversal method used for things like JSON Schema generation, or
POJO introspection.
|
void |
depositSchemaProperty(ObjectNode propertiesNode,
SerializerProvider provider)
Deprecated.
|
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 finding annotation associated with this property;
meaning annotation associated with one of entities used to
access property.
|
<A extends Annotation> |
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).
|
PropertyName |
getFullName()
Method for getting full name definition, including possible
format-specific additional properties (such as namespace when
using XML backend).
|
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.
|
PropertyMetadata |
getMetadata()
Accessor for additional optional information about property.
|
String |
getName()
Method to get logical name of the property
|
Class<?> |
getPropertyType() |
Class<?> |
getRawSerializationType() |
JavaType |
getSerializationType() |
SerializableString |
getSerializedName() |
JsonSerializer<Object> |
getSerializer() |
JavaType |
getType()
Method to get declared type of the property.
|
Class<?>[] |
getViews() |
PropertyName |
getWrapperName()
If property is indicated to be wrapped, name of
wrapper element to use.
|
boolean |
hasNullSerializer() |
boolean |
hasSerializer() |
boolean |
isRequired()
Whether value for property is marked as required using
annotations or associated schema.
|
protected boolean |
isRequired(AnnotationIntrospector intr)
Deprecated.
since 2.2, use
isRequired() instead. |
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 jgen,
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 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.
|
void |
serializeAsOmittedField(Object bean,
JsonGenerator jgen,
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 jgen,
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() |
public static final Object MARKER_FOR_EMPTY
protected final AnnotatedMember _member
protected final Annotations _contextAnnotations
protected final JavaType _declaredType
protected final Method _accessorMethod
_field
is null.protected final Field _field
_accessorMethod
is null.protected final SerializedString _name
NOTE: do NOT change name of this field; it is accessed by Afterburner module. 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 _cfgSerializationType
protected JsonSerializer<Object> _serializer
protected JsonSerializer<Object> _nullSerializer
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
protected final Object _suppressableValue
protected final Class<?>[] _includeInViews
protected TypeSerializer _typeSerializer
protected JavaType _nonTrivialBaseType
protected final PropertyMetadata _metadata
public BeanPropertyWriter(BeanPropertyDefinition propDef, AnnotatedMember member, Annotations contextAnnotations, JavaType declaredType, JsonSerializer<?> ser, TypeSerializer typeSer, JavaType serType, boolean suppressNulls, Object suppressableValue)
protected BeanPropertyWriter(BeanPropertyWriter base)
protected BeanPropertyWriter(BeanPropertyWriter base, SerializedString name)
public BeanPropertyWriter rename(NameTransformer transformer)
public void assignSerializer(JsonSerializer<Object> ser)
public void assignNullSerializer(JsonSerializer<Object> nullSer)
public BeanPropertyWriter unwrappingWriter(NameTransformer unwrapper)
public void setNonTrivialBaseType(JavaType t)
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 boolean isRequired()
BeanProperty
isRequired
in interface BeanProperty
public PropertyMetadata getMetadata()
BeanProperty
getMetadata
in interface BeanProperty
public <A extends Annotation> A getAnnotation(Class<A> acls)
BeanProperty
getAnnotation
in interface BeanProperty
public <A extends Annotation> A getContextAnnotation(Class<A> acls)
BeanProperty
getContextAnnotation
in interface BeanProperty
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 boolean isUnwrapping()
Default implementation simply returns false.
public boolean willSuppressNulls()
public JsonSerializer<Object> getSerializer()
public JavaType getSerializationType()
public Class<?> getRawSerializationType()
public Class<?> getPropertyType()
public Type getGenericPropertyType()
public Class<?>[] getViews()
@Deprecated protected boolean isRequired(AnnotationIntrospector intr)
isRequired()
instead.NOTE: due to introspection, this is a slow method to call and should never be called during actual serialization or filtering of the property. Rather it is needed for traversal needed for things like constructing JSON Schema instances.
public void serializeAsField(Object bean, JsonGenerator jgen, SerializerProvider prov) throws Exception
serializeAsField
in class PropertyWriter
Exception
public void serializeAsOmittedField(Object bean, JsonGenerator jgen, SerializerProvider prov) throws Exception
serializeAsOmittedField
in class PropertyWriter
Exception
public void serializeAsElement(Object bean, JsonGenerator jgen, 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 jgen, SerializerProvider prov) throws Exception
serializeAsPlaceholder
in class PropertyWriter
Exception
public void depositSchemaProperty(JsonObjectFormatVisitor objectVisitor) throws JsonMappingException
PropertyWriter
depositSchemaProperty
in interface BeanProperty
depositSchemaProperty
in class PropertyWriter
objectVisitor
- 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
@Deprecated protected void _handleSelfReference(Object bean, JsonSerializer<?> ser) throws JsonMappingException
JsonMappingException
protected boolean _handleSelfReference(Object bean, JsonGenerator jgen, SerializerProvider prov, JsonSerializer<?> ser) throws JsonMappingException
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 itJsonMappingException
Copyright © 2014 FasterXML. All Rights Reserved.