Class BeanDeserializerBase
- java.lang.Object
-
- com.fasterxml.jackson.databind.JsonDeserializer<T>
-
- com.fasterxml.jackson.databind.deser.std.StdDeserializer<Object>
-
- com.fasterxml.jackson.databind.deser.BeanDeserializerBase
-
- All Implemented Interfaces:
ContextualDeserializer
,NullValueProvider
,ResolvableDeserializer
,ValueInstantiator.Gettable
,Serializable
- Direct Known Subclasses:
BeanAsArrayBuilderDeserializer
,BeanAsArrayDeserializer
,BeanDeserializer
,BuilderBasedDeserializer
public abstract class BeanDeserializerBase extends StdDeserializer<Object> implements ContextualDeserializer, ResolvableDeserializer, ValueInstantiator.Gettable, Serializable
Base class forBeanDeserializer
.- See Also:
- Serialized Form
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class com.fasterxml.jackson.databind.JsonDeserializer
JsonDeserializer.None
-
-
Field Summary
Fields Modifier and Type Field Description protected SettableAnyProperty
_anySetter
Fallback setter used for handling any properties that are not mapped to regular setters.protected JsonDeserializer<Object>
_arrayDelegateDeserializer
Deserializer that is used iff array-delegate-based creator is to be used for deserializing from JSON Object.protected Map<String,SettableBeanProperty>
_backRefs
We may also have one or more back reference fields (usually zero or one).protected BeanPropertyMap
_beanProperties
Mapping of property names to properties, built when all properties to use have been successfully resolved.protected JavaType
_beanType
Declared type of the bean this deserializer handles.protected JsonDeserializer<Object>
_delegateDeserializer
Deserializer that is used iff delegate-based creator is to be used for deserializing from JSON Object.protected ExternalTypeHandler
_externalTypeIdHandler
Handler that we need iff any of properties uses external type id.protected Set<String>
_ignorableProps
In addition to properties that are set, we will also keep track of recognized but ignorable properties: these will be skipped without errors or warnings.protected boolean
_ignoreAllUnknown
Flag that can be set to ignore and skip unknown properties.protected ValueInjector[]
_injectables
List ofValueInjector
s, if any injectable values are expected by the bean; otherwise null.protected boolean
_needViewProcesing
Flag that indicates that some aspect of deserialization depends on active view used (if any)protected boolean
_nonStandardCreation
Flag that is set to mark "non-standard" cases; where either we use one of non-default creators, or there are unwrapped values to consider.protected ObjectIdReader
_objectIdReader
If an Object Id is to be used for value handled by this deserializer, this reader is used for handling.protected PropertyBasedCreator
_propertyBasedCreator
If the bean needs to be instantiated using constructor or factory method that takes one or more named properties as argument(s), this creator is used for instantiation.protected com.fasterxml.jackson.annotation.JsonFormat.Shape
_serializationShape
Requested shape from bean class annotations.protected HashMap<ClassKey,JsonDeserializer<Object>>
_subDeserializers
Lazily constructed map used to contain deserializers needed for polymorphic subtypes.protected UnwrappedPropertyHandler
_unwrappedPropertyHandler
If one of properties has "unwrapped" value, we need separate helper objectprotected ValueInstantiator
_valueInstantiator
Object that handles details of constructing initial bean value (to which bind data to), unless instance is passed (via updateValue())protected boolean
_vanillaProcessing
Flag that indicates that no "special features" whatsoever are enabled, so the simplest processing is possible.protected static PropertyName
TEMP_PROPERTY_NAME
-
Fields inherited from class com.fasterxml.jackson.databind.deser.std.StdDeserializer
_valueClass, F_MASK_ACCEPT_ARRAYS, F_MASK_INT_COERCIONS
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
BeanDeserializerBase(BeanDeserializerBase src)
protected
BeanDeserializerBase(BeanDeserializerBase src, boolean ignoreAllUnknown)
protected
BeanDeserializerBase(BeanDeserializerBase src, BeanPropertyMap beanProps)
BeanDeserializerBase(BeanDeserializerBase src, ObjectIdReader oir)
protected
BeanDeserializerBase(BeanDeserializerBase src, NameTransformer unwrapper)
BeanDeserializerBase(BeanDeserializerBase src, Set<String> ignorableProps)
protected
BeanDeserializerBase(BeanDeserializerBuilder builder, BeanDescription beanDesc, BeanPropertyMap properties, Map<String,SettableBeanProperty> backRefs, Set<String> ignorableProps, boolean ignoreAllUnknown, boolean hasViews)
Constructor used when initially building a deserializer instance, given aBeanDeserializerBuilder
that contains configuration.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods Modifier and Type Method Description protected Object
_convertObjectId(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt, Object rawId, JsonDeserializer<Object> idDeser)
Helper method we need to do necessary conversion from whatever native object id type is, into declared type that Jackson internals expect.protected abstract Object
_deserializeUsingPropertyBased(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt)
protected NameTransformer
_findPropertyUnwrapper(DeserializationContext ctxt, SettableBeanProperty prop)
Helper method called to see if given property might be so-called unwrapped property: these require special handling.protected JsonDeserializer<Object>
_findSubclassDeserializer(DeserializationContext ctxt, Object bean, TokenBuffer unknownTokens)
Helper method called to (try to) locate deserializer for given sub-type of type that this deserializer handles.protected Object
_handleTypedObjectId(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt, Object pojo, Object rawId)
Offlined method called to handle "native" Object Id that has been read and known to be associated with given deserialized POJO.protected void
_replaceProperty(BeanPropertyMap props, SettableBeanProperty[] creatorProps, SettableBeanProperty origProp, SettableBeanProperty newProp)
protected SettableBeanProperty
_resolvedObjectIdProperty(DeserializationContext ctxt, SettableBeanProperty prop)
Method that wraps given property withObjectIdReferenceProperty
in case where object id resolution is required.protected SettableBeanProperty
_resolveInnerClassValuedProperty(DeserializationContext ctxt, SettableBeanProperty prop)
Helper method that will handle gruesome details of dealing with properties that have non-static inner class as value...protected SettableBeanProperty
_resolveManagedReferenceProperty(DeserializationContext ctxt, SettableBeanProperty prop)
Helper method called to see if given property is part of 'managed' property pair (managed + back reference), and if so, handle resolution details.protected SettableBeanProperty
_resolveMergeAndNullSettings(DeserializationContext ctxt, SettableBeanProperty prop, PropertyMetadata propMetadata)
protected abstract BeanDeserializerBase
asArrayDeserializer()
Fluent factory for creating a variant that can handle POJO output as a JSON Array.JsonDeserializer<?>
createContextual(DeserializationContext ctxt, BeanProperty property)
Although most of post-processing is done in resolve(), we only get access to referring property's annotations here; and this is needed to support per-property ObjectIds.Iterator<SettableBeanProperty>
creatorProperties()
Accessor for finding properties that represents values to pass through property-based creator method (constructor or factory method)Object
deserializeFromArray(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt)
Object
deserializeFromBoolean(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt)
Method called to deserialize POJO value from a JSON boolean value (true, false)Object
deserializeFromDouble(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt)
Method called to deserialize POJO value from a JSON floating-point number.Object
deserializeFromEmbedded(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt)
Object
deserializeFromNumber(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt)
abstract Object
deserializeFromObject(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt)
General version used when handling needs more advanced features.protected Object
deserializeFromObjectId(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt)
Method called in cases where it looks like we got an Object Id to parse and use as a reference.protected Object
deserializeFromObjectUsingNonDefault(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt)
Object
deserializeFromString(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt)
protected Object
deserializeWithObjectId(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt)
Alternative deserialization method used when we expect to see Object Id; if so, we will need to ensure that the Id is seen before anything else, to ensure that it is available for solving references, even if JSON itself is not ordered that way.Object
deserializeWithType(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt, TypeDeserializer typeDeserializer)
Base implementation that does not assume specific type inclusion mechanism.SettableBeanProperty
findBackReference(String logicalName)
Method needed byBeanDeserializerFactory
to properly link managed- and back-reference pairs.protected JsonDeserializer<Object>
findConvertingDeserializer(DeserializationContext ctxt, SettableBeanProperty prop)
Helper method that can be used to see if specified property is annotated to indicate use of a converter for property value (in case of container types, it is container type itself, not key or content type).SettableBeanProperty
findProperty(int propertyIndex)
Alternate find method that tries to locate a property with givenproperty index
.SettableBeanProperty
findProperty(PropertyName propertyName)
SettableBeanProperty
findProperty(String propertyName)
Accessor for finding the property with given name, if POJO has one.Class<?>
getBeanClass()
Deprecated.Since 2.3, usehandledType()
insteadAccessPattern
getEmptyAccessPattern()
This method may be called in conjunction with calls toJsonDeserializer.getEmptyValue(DeserializationContext)
, to check whether it needs to be called just once (static values), or each time empty value is needed.Object
getEmptyValue(DeserializationContext ctxt)
Method called to determine value to be used for "empty" values (most commonly when deserializing from empty JSON Strings).Collection<Object>
getKnownPropertyNames()
Method that will either return null to indicate that type being deserializers has no concept of properties; or a collection of identifiers for whichtoString
will give external property name.AccessPattern
getNullAccessPattern()
Default implementation indicates that "null value" to use for input null is simply Java `null` for all deserializers, unless overridden by sub-classes.ObjectIdReader
getObjectIdReader()
Overridden to return true for those instances that are handling value for which Object Identity handling is enabled (either via value type or referring property).int
getPropertyCount()
Accessor for checking number of deserialized properties.ValueInstantiator
getValueInstantiator()
JavaType
getValueType()
Exact structured type this deserializer handles, if known.Class<?>
handledType()
Method for accessing type of values this deserializer produces.protected void
handleIgnoredProperty(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt, Object beanOrClass, String propName)
Method called when an explicitly ignored property (one specified with a name to match, either by property annotation or class annotation) is encountered.protected Object
handlePolymorphic(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt, Object bean, TokenBuffer unknownTokens)
Method called in cases where we may have polymorphic deserialization case: that is, type of Creator-constructed bean is not the type of deserializer itself.protected Object
handleUnknownProperties(DeserializationContext ctxt, Object bean, TokenBuffer unknownTokens)
Method called to handle set of one or more unknown properties, stored in their entirety in givenTokenBuffer
(as field entries, name and value).protected void
handleUnknownProperty(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt, Object beanOrClass, String propName)
Method called when a JSON property is encountered that has not matching setter, any-setter or field, and thus cannot be assigned.protected void
handleUnknownVanilla(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt, Object bean, String propName)
Helper method called for an unknown property, when using "vanilla" processing.boolean
hasProperty(String propertyName)
boolean
hasViews()
protected void
injectValues(DeserializationContext ctxt, Object bean)
boolean
isCachable()
Method called to see if deserializer instance is cachable and usable for other properties of same type (type for which instance was created).Iterator<SettableBeanProperty>
properties()
Accessor for iterating over properties this deserializer uses; with the exception that properties passed via Creator methods (specifically, "property-based constructor") are not included, but can be accessed separate by callingcreatorProperties()
void
replaceProperty(SettableBeanProperty original, SettableBeanProperty replacement)
Method that can be used to replace an existing property with a modified one.void
resolve(DeserializationContext ctxt)
Method called to finalize setup of this deserializer, after deserializer itself has been registered.Boolean
supportsUpdate(DeserializationConfig config)
Introspection method that may be called to see whether deserializer supports update of an existing value (aka "merging") or not.abstract JsonDeserializer<Object>
unwrappingDeserializer(NameTransformer unwrapper)
Method that will return deserializer instance that is able to handle "unwrapped" value instances If no unwrapped instance can be constructed, will simply return this object as-is.BeanDeserializerBase
withBeanProperties(BeanPropertyMap props)
Mutant factory method that custom sub-classes must override; not left as abstract to prevent more drastic backwards compatibility problems.abstract BeanDeserializerBase
withIgnorableProperties(Set<String> ignorableProps)
abstract BeanDeserializerBase
withObjectIdReader(ObjectIdReader oir)
void
wrapAndThrow(Throwable t, Object bean, String fieldName, DeserializationContext ctxt)
Method that will modify caught exception (passed in as argument) as necessary to include reference information, and to ensure it is a subtype ofIOException
, or an unchecked exception.protected Object
wrapInstantiationProblem(Throwable t, DeserializationContext ctxt)
-
Methods inherited from class com.fasterxml.jackson.databind.deser.std.StdDeserializer
_byteOverflow, _coercedTypeDesc, _coerceEmptyString, _coerceIntegral, _coerceNullToken, _coerceTextualNull, _deserializeFromArray, _deserializeFromEmpty, _deserializeWrappedValue, _failDoubleToIntCoercion, _findNullProvider, _hasTextualNull, _intOverflow, _isEmptyOrTextualNull, _isIntNumber, _isNaN, _isNegInf, _isPosInf, _neitherNull, _nonNullNumber, _parseBooleanFromInt, _parseBooleanPrimitive, _parseBytePrimitive, _parseDate, _parseDate, _parseDateFromArray, _parseDoublePrimitive, _parseDoublePrimitive, _parseFloatPrimitive, _parseFloatPrimitive, _parseIntPrimitive, _parseIntPrimitive, _parseLongPrimitive, _parseLongPrimitive, _parseShortPrimitive, _parseString, _reportFailedNullCoerce, _shortOverflow, _verifyEndArrayForSingle, _verifyNullForPrimitive, _verifyNullForPrimitiveCoercion, _verifyNullForScalarCoercion, _verifyNumberForScalarCoercion, _verifyStringForScalarCoercion, findContentNullProvider, findContentNullStyle, findConvertingContentDeserializer, findDeserializer, findFormatFeature, findFormatOverrides, findValueNullProvider, getValueClass, handleMissingEndArrayForSingle, isDefaultDeserializer, isDefaultKeyDeserializer, parseDouble
-
Methods inherited from class com.fasterxml.jackson.databind.JsonDeserializer
deserialize, deserialize, getDelegatee, getEmptyValue, getNullValue, getNullValue, replaceDelegatee
-
-
-
-
Field Detail
-
TEMP_PROPERTY_NAME
protected static final PropertyName TEMP_PROPERTY_NAME
-
_beanType
protected final JavaType _beanType
Declared type of the bean this deserializer handles.
-
_serializationShape
protected final com.fasterxml.jackson.annotation.JsonFormat.Shape _serializationShape
Requested shape from bean class annotations.
-
_valueInstantiator
protected final ValueInstantiator _valueInstantiator
Object that handles details of constructing initial bean value (to which bind data to), unless instance is passed (via updateValue())
-
_delegateDeserializer
protected JsonDeserializer<Object> _delegateDeserializer
Deserializer that is used iff delegate-based creator is to be used for deserializing from JSON Object.
-
_arrayDelegateDeserializer
protected JsonDeserializer<Object> _arrayDelegateDeserializer
Deserializer that is used iff array-delegate-based creator is to be used for deserializing from JSON Object.
-
_propertyBasedCreator
protected PropertyBasedCreator _propertyBasedCreator
If the bean needs to be instantiated using constructor or factory method that takes one or more named properties as argument(s), this creator is used for instantiation. This value gets resolved during general resolution.
-
_nonStandardCreation
protected boolean _nonStandardCreation
Flag that is set to mark "non-standard" cases; where either we use one of non-default creators, or there are unwrapped values to consider.
-
_vanillaProcessing
protected boolean _vanillaProcessing
Flag that indicates that no "special features" whatsoever are enabled, so the simplest processing is possible.
-
_beanProperties
protected final BeanPropertyMap _beanProperties
Mapping of property names to properties, built when all properties to use have been successfully resolved.
-
_injectables
protected final ValueInjector[] _injectables
List ofValueInjector
s, if any injectable values are expected by the bean; otherwise null. This includes injectors used for injecting values via setters and fields, but not ones passed through constructor parameters.
-
_anySetter
protected SettableAnyProperty _anySetter
Fallback setter used for handling any properties that are not mapped to regular setters. If setter is not null, it will be called once for each such property.
-
_ignorableProps
protected final Set<String> _ignorableProps
In addition to properties that are set, we will also keep track of recognized but ignorable properties: these will be skipped without errors or warnings.
-
_ignoreAllUnknown
protected final boolean _ignoreAllUnknown
Flag that can be set to ignore and skip unknown properties. If set, will not throw an exception for unknown properties.
-
_needViewProcesing
protected final boolean _needViewProcesing
Flag that indicates that some aspect of deserialization depends on active view used (if any)
-
_backRefs
protected final Map<String,SettableBeanProperty> _backRefs
We may also have one or more back reference fields (usually zero or one).
-
_subDeserializers
protected transient HashMap<ClassKey,JsonDeserializer<Object>> _subDeserializers
Lazily constructed map used to contain deserializers needed for polymorphic subtypes. Note that this is only needed for polymorphic types, that is, when the actual type is not statically known. For other types this remains null.
-
_unwrappedPropertyHandler
protected UnwrappedPropertyHandler _unwrappedPropertyHandler
If one of properties has "unwrapped" value, we need separate helper object
-
_externalTypeIdHandler
protected ExternalTypeHandler _externalTypeIdHandler
Handler that we need iff any of properties uses external type id.
-
_objectIdReader
protected final ObjectIdReader _objectIdReader
If an Object Id is to be used for value handled by this deserializer, this reader is used for handling.
-
-
Constructor Detail
-
BeanDeserializerBase
protected BeanDeserializerBase(BeanDeserializerBuilder builder, BeanDescription beanDesc, BeanPropertyMap properties, Map<String,SettableBeanProperty> backRefs, Set<String> ignorableProps, boolean ignoreAllUnknown, boolean hasViews)
Constructor used when initially building a deserializer instance, given aBeanDeserializerBuilder
that contains configuration.
-
BeanDeserializerBase
protected BeanDeserializerBase(BeanDeserializerBase src)
-
BeanDeserializerBase
protected BeanDeserializerBase(BeanDeserializerBase src, boolean ignoreAllUnknown)
-
BeanDeserializerBase
protected BeanDeserializerBase(BeanDeserializerBase src, NameTransformer unwrapper)
-
BeanDeserializerBase
public BeanDeserializerBase(BeanDeserializerBase src, ObjectIdReader oir)
-
BeanDeserializerBase
public BeanDeserializerBase(BeanDeserializerBase src, Set<String> ignorableProps)
-
BeanDeserializerBase
protected BeanDeserializerBase(BeanDeserializerBase src, BeanPropertyMap beanProps)
- Since:
- 2.8
-
-
Method Detail
-
unwrappingDeserializer
public abstract JsonDeserializer<Object> unwrappingDeserializer(NameTransformer unwrapper)
Description copied from class:JsonDeserializer
Method that will return deserializer instance that is able to handle "unwrapped" value instances If no unwrapped instance can be constructed, will simply return this object as-is.Default implementation just returns 'this' indicating that no unwrapped variant exists
- Overrides:
unwrappingDeserializer
in classJsonDeserializer<Object>
-
withObjectIdReader
public abstract BeanDeserializerBase withObjectIdReader(ObjectIdReader oir)
-
withIgnorableProperties
public abstract BeanDeserializerBase withIgnorableProperties(Set<String> ignorableProps)
-
withBeanProperties
public BeanDeserializerBase withBeanProperties(BeanPropertyMap props)
Mutant factory method that custom sub-classes must override; not left as abstract to prevent more drastic backwards compatibility problems.- Since:
- 2.8
-
asArrayDeserializer
protected abstract BeanDeserializerBase asArrayDeserializer()
Fluent factory for creating a variant that can handle POJO output as a JSON Array. Implementations may ignore this request if no such input is possible.- Since:
- 2.1
-
resolve
public void resolve(DeserializationContext ctxt) throws JsonMappingException
Method called to finalize setup of this deserializer, after deserializer itself has been registered. This is needed to handle recursive and transitive dependencies.- Specified by:
resolve
in interfaceResolvableDeserializer
- Parameters:
ctxt
- Context to use for accessing configuration, resolving secondary deserializers- Throws:
JsonMappingException
-
_replaceProperty
protected void _replaceProperty(BeanPropertyMap props, SettableBeanProperty[] creatorProps, SettableBeanProperty origProp, SettableBeanProperty newProp)
- Since:
- 2.8.8
-
findConvertingDeserializer
protected JsonDeserializer<Object> findConvertingDeserializer(DeserializationContext ctxt, SettableBeanProperty prop) throws JsonMappingException
Helper method that can be used to see if specified property is annotated to indicate use of a converter for property value (in case of container types, it is container type itself, not key or content type).NOTE: returned deserializer is NOT yet contextualized, caller needs to take care to do that.
- Throws:
JsonMappingException
- Since:
- 2.2
-
createContextual
public JsonDeserializer<?> createContextual(DeserializationContext ctxt, BeanProperty property) throws JsonMappingException
Although most of post-processing is done in resolve(), we only get access to referring property's annotations here; and this is needed to support per-property ObjectIds. We will also consider Shape transformations (read from Array) at this point, since it may come from either Class definition or property.- Specified by:
createContextual
in interfaceContextualDeserializer
- Parameters:
ctxt
- Deserialization context to access configuration, additional deserializers that may be needed by this deserializerproperty
- Method, field or constructor parameter that represents the property (and is used to assign deserialized value). Should be available; but there may be cases where caller cannot provide it and null is passed instead (in which case impls usually pass 'this' deserializer as is)- Returns:
- Deserializer to use for deserializing values of specified property; may be this instance or a new instance.
- Throws:
JsonMappingException
-
_resolveManagedReferenceProperty
protected SettableBeanProperty _resolveManagedReferenceProperty(DeserializationContext ctxt, SettableBeanProperty prop) throws JsonMappingException
Helper method called to see if given property is part of 'managed' property pair (managed + back reference), and if so, handle resolution details.- Throws:
JsonMappingException
-
_resolvedObjectIdProperty
protected SettableBeanProperty _resolvedObjectIdProperty(DeserializationContext ctxt, SettableBeanProperty prop) throws JsonMappingException
Method that wraps given property withObjectIdReferenceProperty
in case where object id resolution is required.- Throws:
JsonMappingException
-
_findPropertyUnwrapper
protected NameTransformer _findPropertyUnwrapper(DeserializationContext ctxt, SettableBeanProperty prop) throws JsonMappingException
Helper method called to see if given property might be so-called unwrapped property: these require special handling.- Throws:
JsonMappingException
-
_resolveInnerClassValuedProperty
protected SettableBeanProperty _resolveInnerClassValuedProperty(DeserializationContext ctxt, SettableBeanProperty prop)
Helper method that will handle gruesome details of dealing with properties that have non-static inner class as value...
-
_resolveMergeAndNullSettings
protected SettableBeanProperty _resolveMergeAndNullSettings(DeserializationContext ctxt, SettableBeanProperty prop, PropertyMetadata propMetadata) throws JsonMappingException
- Throws:
JsonMappingException
-
getNullAccessPattern
public AccessPattern getNullAccessPattern()
Description copied from class:JsonDeserializer
Default implementation indicates that "null value" to use for input null is simply Java `null` for all deserializers, unless overridden by sub-classes. This information may be used as optimization.- Specified by:
getNullAccessPattern
in interfaceNullValueProvider
- Overrides:
getNullAccessPattern
in classJsonDeserializer<Object>
-
getEmptyAccessPattern
public AccessPattern getEmptyAccessPattern()
Description copied from class:JsonDeserializer
This method may be called in conjunction with calls toJsonDeserializer.getEmptyValue(DeserializationContext)
, to check whether it needs to be called just once (static values), or each time empty value is needed.- Overrides:
getEmptyAccessPattern
in classJsonDeserializer<Object>
-
getEmptyValue
public Object getEmptyValue(DeserializationContext ctxt) throws JsonMappingException
Description copied from class:JsonDeserializer
Method called to determine value to be used for "empty" values (most commonly when deserializing from empty JSON Strings). Usually this is same asJsonDeserializer.getNullValue(com.fasterxml.jackson.databind.DeserializationContext)
(which in turn is usually simply Java null), but it can be overridden for types. Or, if type should never be converted from empty String, method can also throw an exception.Since version 2.6 (in which the context argument was added), call is expected to be made each and every time an empty value is needed.
Since version 2.9 does not require return of `T` any more.
Default implementation simply calls
JsonDeserializer.getNullValue(com.fasterxml.jackson.databind.DeserializationContext)
and returns value.- Overrides:
getEmptyValue
in classJsonDeserializer<Object>
- Throws:
JsonMappingException
-
isCachable
public boolean isCachable()
Description copied from class:JsonDeserializer
Method called to see if deserializer instance is cachable and usable for other properties of same type (type for which instance was created).Note that cached instances are still resolved on per-property basis, if instance implements
ResolvableDeserializer
: cached instance is just as the base. This means that in most cases it is safe to cache instances; however, it only makes sense to cache instances if instantiation is expensive, or if instances are heavy-weight.Default implementation returns false, to indicate that no caching is done.
- Overrides:
isCachable
in classJsonDeserializer<Object>
-
supportsUpdate
public Boolean supportsUpdate(DeserializationConfig config)
Description copied from class:JsonDeserializer
Introspection method that may be called to see whether deserializer supports update of an existing value (aka "merging") or not. Return value should either beBoolean.FALSE
if update is not supported at all (immutable values);Boolean.TRUE
if update should usually work (regular POJOs, for example), ornull
if this is either not known, or may sometimes work.Information gathered is typically used to either prevent merging update for property (either by skipping, if based on global defaults; or by exception during deserialization construction if explicit attempt made) if
Boolean.FALSE
returned, or inclusion ifBoolean.TRUE
is specified. If "unknown" case (null
returned) behavior is to exclude property if global defaults used; or to allow if explicit per-type or property merging is defined.Default implementation returns
null
to allow explicit per-type or per-property attempts.- Overrides:
supportsUpdate
in classJsonDeserializer<Object>
-
handledType
public Class<?> handledType()
Description copied from class:JsonDeserializer
Method for accessing type of values this deserializer produces. Note that this information is not guaranteed to be exact -- it may be a more generic (super-type) -- but it should not be incorrect (return a non-related type).Default implementation will return null, which means almost same same as returning
Object.class
would; that is, that nothing is known about handled type.- Overrides:
handledType
in classStdDeserializer<Object>
-
getObjectIdReader
public ObjectIdReader getObjectIdReader()
Overridden to return true for those instances that are handling value for which Object Identity handling is enabled (either via value type or referring property).- Overrides:
getObjectIdReader
in classJsonDeserializer<Object>
- Returns:
- ObjectIdReader used for resolving possible Object Identifier value, instead of full value serialization, if deserializer can do that; null if no Object Id is expected.
-
hasProperty
public boolean hasProperty(String propertyName)
-
hasViews
public boolean hasViews()
-
getPropertyCount
public int getPropertyCount()
Accessor for checking number of deserialized properties.
-
getKnownPropertyNames
public Collection<Object> getKnownPropertyNames()
Description copied from class:JsonDeserializer
Method that will either return null to indicate that type being deserializers has no concept of properties; or a collection of identifiers for whichtoString
will give external property name. This is only to be used for error reporting and diagnostics purposes (most commonly, to accompany "unknown property" exception).- Overrides:
getKnownPropertyNames
in classJsonDeserializer<Object>
-
getBeanClass
@Deprecated public final Class<?> getBeanClass()
Deprecated.Since 2.3, usehandledType()
instead
-
getValueType
public JavaType getValueType()
Description copied from class:StdDeserializer
Exact structured type this deserializer handles, if known.Default implementation just returns null.
- Overrides:
getValueType
in classStdDeserializer<Object>
-
properties
public Iterator<SettableBeanProperty> properties()
Accessor for iterating over properties this deserializer uses; with the exception that properties passed via Creator methods (specifically, "property-based constructor") are not included, but can be accessed separate by callingcreatorProperties()
-
creatorProperties
public Iterator<SettableBeanProperty> creatorProperties()
Accessor for finding properties that represents values to pass through property-based creator method (constructor or factory method)- Since:
- 2.0
-
findProperty
public SettableBeanProperty findProperty(PropertyName propertyName)
-
findProperty
public SettableBeanProperty findProperty(String propertyName)
Accessor for finding the property with given name, if POJO has one. Name used is the external name, i.e. name used in external data representation (JSON).- Since:
- 2.0
-
findProperty
public SettableBeanProperty findProperty(int propertyIndex)
Alternate find method that tries to locate a property with givenproperty index
. Note that access by index is not necessarily faster than by name, since properties are not directly indexable; however, for most instances difference is not significant as number of properties is low.- Since:
- 2.3
-
findBackReference
public SettableBeanProperty findBackReference(String logicalName)
Method needed byBeanDeserializerFactory
to properly link managed- and back-reference pairs.- Overrides:
findBackReference
in classJsonDeserializer<Object>
-
getValueInstantiator
public ValueInstantiator getValueInstantiator()
- Specified by:
getValueInstantiator
in interfaceValueInstantiator.Gettable
-
replaceProperty
public void replaceProperty(SettableBeanProperty original, SettableBeanProperty replacement)
Method that can be used to replace an existing property with a modified one.NOTE: only ever use this method if you know what you are doing; incorrect usage can break deserializer.
- Parameters:
original
- Property to replacereplacement
- Property to replace it with- Since:
- 2.1
-
deserializeFromObject
public abstract Object deserializeFromObject(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt) throws IOException
General version used when handling needs more advanced features.- Throws:
IOException
-
deserializeWithType
public Object deserializeWithType(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt, TypeDeserializer typeDeserializer) throws IOException
Description copied from class:StdDeserializer
Base implementation that does not assume specific type inclusion mechanism. Sub-classes are expected to override this method if they are to handle type information.- Overrides:
deserializeWithType
in classStdDeserializer<Object>
typeDeserializer
- Deserializer to use for handling type information- Throws:
IOException
-
_handleTypedObjectId
protected Object _handleTypedObjectId(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt, Object pojo, Object rawId) throws IOException
Offlined method called to handle "native" Object Id that has been read and known to be associated with given deserialized POJO.- Throws:
IOException
- Since:
- 2.3
-
_convertObjectId
protected Object _convertObjectId(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt, Object rawId, JsonDeserializer<Object> idDeser) throws IOException
Helper method we need to do necessary conversion from whatever native object id type is, into declared type that Jackson internals expect. This may be simple cast (for String ids), or something more complicated; in latter case we may need to create bogus content buffer to allow use of id deserializer.- Throws:
IOException
- Since:
- 2.3
-
deserializeWithObjectId
protected Object deserializeWithObjectId(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt) throws IOException
Alternative deserialization method used when we expect to see Object Id; if so, we will need to ensure that the Id is seen before anything else, to ensure that it is available for solving references, even if JSON itself is not ordered that way. This may require buffering in some cases, but usually just a simple lookup to ensure that ordering is correct.- Throws:
IOException
-
deserializeFromObjectId
protected Object deserializeFromObjectId(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt) throws IOException
Method called in cases where it looks like we got an Object Id to parse and use as a reference.- Throws:
IOException
-
deserializeFromObjectUsingNonDefault
protected Object deserializeFromObjectUsingNonDefault(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt) throws IOException
- Throws:
IOException
-
_deserializeUsingPropertyBased
protected abstract Object _deserializeUsingPropertyBased(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt) throws IOException
- Throws:
IOException
-
deserializeFromNumber
public Object deserializeFromNumber(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt) throws IOException
- Throws:
IOException
-
deserializeFromString
public Object deserializeFromString(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt) throws IOException
- Throws:
IOException
-
deserializeFromDouble
public Object deserializeFromDouble(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt) throws IOException
Method called to deserialize POJO value from a JSON floating-point number.- Throws:
IOException
-
deserializeFromBoolean
public Object deserializeFromBoolean(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt) throws IOException
Method called to deserialize POJO value from a JSON boolean value (true, false)- Throws:
IOException
-
deserializeFromArray
public Object deserializeFromArray(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt) throws IOException
- Throws:
IOException
-
deserializeFromEmbedded
public Object deserializeFromEmbedded(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt) throws IOException
- Throws:
IOException
-
injectValues
protected void injectValues(DeserializationContext ctxt, Object bean) throws IOException
- Throws:
IOException
-
handleUnknownProperties
protected Object handleUnknownProperties(DeserializationContext ctxt, Object bean, TokenBuffer unknownTokens) throws IOException
Method called to handle set of one or more unknown properties, stored in their entirety in givenTokenBuffer
(as field entries, name and value).- Throws:
IOException
-
handleUnknownVanilla
protected void handleUnknownVanilla(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt, Object bean, String propName) throws IOException
Helper method called for an unknown property, when using "vanilla" processing.- Throws:
IOException
-
handleUnknownProperty
protected void handleUnknownProperty(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt, Object beanOrClass, String propName) throws IOException
Method called when a JSON property is encountered that has not matching setter, any-setter or field, and thus cannot be assigned.- Overrides:
handleUnknownProperty
in classStdDeserializer<Object>
- Parameters:
p
- Parser that points to value of the unknown propertyctxt
- Context for deserialization; allows access to the parser, error reporting functionalitybeanOrClass
- Instance that is being populated by this deserializer, or if not known, Class that would be instantiated. If null, will assume type is whatStdDeserializer.getValueClass()
returns.propName
- Name of the property that cannot be mapped- Throws:
IOException
-
handleIgnoredProperty
protected void handleIgnoredProperty(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt, Object beanOrClass, String propName) throws IOException
Method called when an explicitly ignored property (one specified with a name to match, either by property annotation or class annotation) is encountered.- Throws:
IOException
- Since:
- 2.3
-
handlePolymorphic
protected Object handlePolymorphic(com.fasterxml.jackson.core.JsonParser p, DeserializationContext ctxt, Object bean, TokenBuffer unknownTokens) throws IOException
Method called in cases where we may have polymorphic deserialization case: that is, type of Creator-constructed bean is not the type of deserializer itself. It should be a sub-class or implementation class; either way, we may have more specific deserializer to use for handling it.- Parameters:
p
- (optional) If not null, parser that has more properties to handle (in addition to buffered properties); if null, all properties are passed in buffer- Throws:
IOException
-
_findSubclassDeserializer
protected JsonDeserializer<Object> _findSubclassDeserializer(DeserializationContext ctxt, Object bean, TokenBuffer unknownTokens) throws IOException
Helper method called to (try to) locate deserializer for given sub-type of type that this deserializer handles.- Throws:
IOException
-
wrapAndThrow
public void wrapAndThrow(Throwable t, Object bean, String fieldName, DeserializationContext ctxt) throws IOException
Method that will modify caught exception (passed in as argument) as necessary to include reference information, and to ensure it is a subtype ofIOException
, or an unchecked exception.Rules for wrapping and unwrapping are bit complicated; essentially:
- Errors are to be passed as is (if uncovered via unwrapping)
- "Plain" IOExceptions (ones that are not of type
JsonMappingException
are to be passed as is
- Throws:
IOException
-
wrapInstantiationProblem
protected Object wrapInstantiationProblem(Throwable t, DeserializationContext ctxt) throws IOException
- Throws:
IOException
-
-