Class BeanDeserializer
java.lang.Object
org.codehaus.jackson.map.JsonDeserializer<Object>
org.codehaus.jackson.map.deser.std.StdDeserializer<Object>
org.codehaus.jackson.map.deser.BeanDeserializer
- All Implemented Interfaces:
ResolvableDeserializer
- Direct Known Subclasses:
ThrowableDeserializer
Deserializer class that can deserialize instances of
arbitrary bean objects, usually from JSON Object structs,
but possibly also from simple types like String values.
-
Nested Class Summary
Nested classes/interfaces inherited from class StdDeserializer
StdDeserializer.BigDecimalDeserializer, StdDeserializer.BigIntegerDeserializer, StdDeserializer.BooleanDeserializer, StdDeserializer.ByteDeserializer, StdDeserializer.CharacterDeserializer, StdDeserializer.DoubleDeserializer, StdDeserializer.FloatDeserializer, StdDeserializer.IntegerDeserializer, StdDeserializer.LongDeserializer, StdDeserializer.NumberDeserializer, StdDeserializer.PrimitiveOrWrapperDeserializer<T>, StdDeserializer.ShortDeserializer, StdDeserializer.SqlDateDeserializer, StdDeserializer.StackTraceElementDeserializerNested classes/interfaces inherited from class JsonDeserializer
JsonDeserializer.None -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected SettableAnyPropertyFallback setter used for handling any properties that are not mapped to regular setters.protected final Map<String, SettableBeanProperty> We may also have one or more back reference fields (usually zero or one).protected final BeanPropertyMapMapping of property names to properties, built when all properties to use have been successfully resolved.protected final JavaTypeDeclared type of the bean this deserializer handles.protected JsonDeserializer<Object> Deserializer that is used iff delegate-based creator is to be used for deserializing from JSON Object.protected ExternalTypeHandlerHandler that we need iff any of properties uses external type id.protected final AnnotatedClassClass for which deserializer is built; used for accessing annotations during resolution phase (seeresolve(DeserializationConfig, DeserializerProvider)).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 final booleanFlag that can be set to ignore and skip unknown properties.protected final ValueInjector[]List ofValueInjectors, if any injectable values are expected by the bean; otherwise null.protected booleanFlag 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 final BeanPropertyProperty that contains value to be deserialized using deserializer; mostly needed to find contextual annotations for subtypes.protected final PropertyBasedCreatorIf 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 HashMap<ClassKey, JsonDeserializer<Object>> Lazily constructed map used to contain deserializers needed for polymorphic subtypes.protected UnwrappedPropertyHandlerIf one of properties has "unwrapped" value, we need separate helper objectprotected final ValueInstantiatorObject that handles details of constructing initial bean value (to which bind data to), unless instance is passed (via updateValue())Fields inherited from class StdDeserializer
_valueClass -
Constructor Summary
ConstructorsModifierConstructorDescriptionBeanDeserializer(BeanDescription beanDesc, BeanProperty property, ValueInstantiator valueInstantiator, BeanPropertyMap properties, Map<String, SettableBeanProperty> backRefs, HashSet<String> ignorableProps, boolean ignoreAllUnknown, SettableAnyProperty anySetter, List<ValueInjector> injectables) protectedCopy-constructor that can be used by sub-classes to allow copy-on-write styling copying of settings of an existing instance.protectedBeanDeserializer(BeanDeserializer src, boolean ignoreAllUnknown) BeanDeserializer(AnnotatedClass forClass, JavaType type, BeanProperty property, CreatorCollector creators, BeanPropertyMap properties, Map<String, SettableBeanProperty> backRefs, HashSet<String> ignorableProps, boolean ignoreAllUnknown, SettableAnyProperty anySetter) Deprecated.protectedBeanDeserializer(AnnotatedClass forClass, JavaType type, BeanProperty property, ValueInstantiator valueInstantiator, BeanPropertyMap properties, Map<String, SettableBeanProperty> backRefs, HashSet<String> ignorableProps, boolean ignoreAllUnknown, SettableAnyProperty anySetter, List<ValueInjector> injectables) -
Method Summary
Modifier and TypeMethodDescriptionprotected final ObjectMethod called to deserialize bean using "property-based creator": this means that a non-default constructor or factory method is called, and then possibly other setters.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 SettableBeanPropertyHelper method that will handle gruesome details of dealing with properties that have non-static inner class as value...protected SettableBeanPropertyHelper method called to see if given property is part of 'managed' property pair (managed + back reference), and if so, handle resolution details.protected SettableBeanPropertyHelper method called to see if given property might be so-called unwrapped property: these require special handling.final Objectdeserialize(JsonParser jp, DeserializationContext ctxt) Main deserialization method for bean-based objects (POJOs).deserialize(JsonParser jp, DeserializationContext ctxt, Object bean) Secondary deserialization method, called in cases where POJO instance is created as part of deserialization, potentially after collecting some or all of the properties to set.Method called to deserialize POJO value from a JSON boolean value (true, false)Method called to deserialize POJO value from a JSON floating-point number.protected Objectprotected Objectprotected Objectprotected Objectprotected ObjectdeserializeWithExternalTypeId(JsonParser jp, DeserializationContext ctxt, Object bean) deserializeWithType(JsonParser jp, DeserializationContext ctxt, TypeDeserializer typeDeserializer) Base implementation that does not assume specific type inclusion mechanism.protected ObjectMethod called when there are declared "unwrapped" properties which need special handlingprotected ObjectdeserializeWithUnwrapped(JsonParser jp, DeserializationContext ctxt, Object bean) findBackReference(String logicalName) Method needed byBeanDeserializerFactoryto properly link managed- and back-reference pairs.final Class<?> intAccessor for checking number of deserialized properties.Exact structured type deserializer handles, if known.protected ObjecthandlePolymorphic(JsonParser jp, 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 ObjecthandleUnknownProperties(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 voidhandleUnknownProperty(JsonParser jp, 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 can not be assigned.booleanhasProperty(String propertyName) protected voidinjectValues(DeserializationContext ctxt, Object bean) voidresolve(DeserializationConfig config, DeserializerProvider provider) Method called to finalize setup of this deserializer, after deserializer itself has been registered.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.voidwrapAndThrow(Throwable t, Object bean, int index) Deprecated.Since 1.7 use variant that takesDeserializationContextvoidwrapAndThrow(Throwable t, Object bean, int index, DeserializationContext ctxt) voidwrapAndThrow(Throwable t, Object bean, String fieldName) Deprecated.Since 1.7 use variant that takesDeserializationContextvoidwrapAndThrow(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 voidMethods inherited from class StdDeserializer
_parseBoolean, _parseBooleanFromNumber, _parseBooleanPrimitive, _parseByte, _parseDate, _parseDouble, _parseDoublePrimitive, _parseFloat, _parseFloatPrimitive, _parseInteger, _parseIntPrimitive, _parseLong, _parseLongPrimitive, _parseShort, _parseShortPrimitive, findDeserializer, getValueClass, isDefaultSerializer, parseDouble, reportUnknownPropertyMethods inherited from class JsonDeserializer
getEmptyValue, getNullValue
-
Field Details
-
_forClass
Class for which deserializer is built; used for accessing annotations during resolution phase (seeresolve(DeserializationConfig, DeserializerProvider)). -
_beanType
Declared type of the bean this deserializer handles. -
_property
Property that contains value to be deserialized using deserializer; mostly needed to find contextual annotations for subtypes.- Since:
- 1.7
-
_valueInstantiator
Object that handles details of constructing initial bean value (to which bind data to), unless instance is passed (via updateValue()) -
_delegateDeserializer
Deserializer that is used iff delegate-based creator is to be used for deserializing from JSON Object. -
_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. -
_nonStandardCreation
protected boolean _nonStandardCreationFlag that is set to mark "non-standard" cases; where either we use one of non-default creators, or there are unwrapped values to consider. -
_beanProperties
Mapping of property names to properties, built when all properties to use have been successfully resolved.- Since:
- 1.7
-
_injectables
List ofValueInjectors, 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.- Since:
- 1.9
-
_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
-
_ignoreAllUnknown
protected final boolean _ignoreAllUnknownFlag that can be set to ignore and skip unknown properties. If set, will not throw an exception for unknown properties. -
_backRefs
We may also have one or more back reference fields (usually zero or one). -
_subDeserializers
Lazily constructed map used to contain deserializers needed for polymorphic subtypes. -
_unwrappedPropertyHandler
If one of properties has "unwrapped" value, we need separate helper object- Since:
- 1.9
-
_externalTypeIdHandler
Handler that we need iff any of properties uses external type id.
-
-
Constructor Details
-
BeanDeserializer
@Deprecated public BeanDeserializer(AnnotatedClass forClass, JavaType type, BeanProperty property, CreatorCollector creators, BeanPropertyMap properties, Map<String, SettableBeanProperty> backRefs, HashSet<String> ignorableProps, boolean ignoreAllUnknown, SettableAnyProperty anySetter) Deprecated.(since 1.9) Use the constructor that takesValueInstantiatorinstead -
BeanDeserializer
public BeanDeserializer(BeanDescription beanDesc, BeanProperty property, ValueInstantiator valueInstantiator, BeanPropertyMap properties, Map<String, SettableBeanProperty> backRefs, HashSet<String> ignorableProps, boolean ignoreAllUnknown, SettableAnyProperty anySetter, List<ValueInjector> injectables) - Since:
- 1.9
-
BeanDeserializer
protected BeanDeserializer(AnnotatedClass forClass, JavaType type, BeanProperty property, ValueInstantiator valueInstantiator, BeanPropertyMap properties, Map<String, SettableBeanProperty> backRefs, HashSet<String> ignorableProps, boolean ignoreAllUnknown, SettableAnyProperty anySetter, List<ValueInjector> injectables) - Since:
- 1.9
-
BeanDeserializer
Copy-constructor that can be used by sub-classes to allow copy-on-write styling copying of settings of an existing instance.- Since:
- 1.7
-
BeanDeserializer
- Since:
- 1.9
-
-
Method Details
-
unwrappingDeserializer
Description copied from class:JsonDeserializerMethod 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:
unwrappingDeserializerin classJsonDeserializer<Object>
-
hasProperty
-
getPropertyCount
public int getPropertyCount()Accessor for checking number of deserialized properties.- Since:
- 1.7
-
getBeanClass
-
getValueType
Description copied from class:StdDeserializerExact structured type deserializer handles, if known.Default implementation just returns null.
- Overrides:
getValueTypein classStdDeserializer<Object>
-
properties
- Since:
- 1.6
-
findBackReference
Method needed byBeanDeserializerFactoryto properly link managed- and back-reference pairs. -
getValueInstantiator
- Since:
- 1.9
-
resolve
public void resolve(DeserializationConfig config, DeserializerProvider provider) 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:
resolvein interfaceResolvableDeserializer- Parameters:
provider- Provider that has constructed deserializer this method is called on.- Throws:
JsonMappingException
-
_resolveManagedReferenceProperty
protected SettableBeanProperty _resolveManagedReferenceProperty(DeserializationConfig config, 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.- Since:
- 1.9
-
_resolveUnwrappedProperty
protected SettableBeanProperty _resolveUnwrappedProperty(DeserializationConfig config, SettableBeanProperty prop) Helper method called to see if given property might be so-called unwrapped property: these require special handling.- Since:
- 1.9
-
_resolveInnerClassValuedProperty
protected SettableBeanProperty _resolveInnerClassValuedProperty(DeserializationConfig config, SettableBeanProperty prop) Helper method that will handle gruesome details of dealing with properties that have non-static inner class as value...- Since:
- 1.9
-
deserialize
public final Object deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException Main deserialization method for bean-based objects (POJOs).- Specified by:
deserializein classJsonDeserializer<Object>- Parameters:
jp- Parsed used for reading JSON contentctxt- Context that can be used to access information about this deserialization activity.- Returns:
- Deserializer value
- Throws:
IOExceptionJsonProcessingException
-
deserialize
public Object deserialize(JsonParser jp, DeserializationContext ctxt, Object bean) throws IOException, JsonProcessingException Secondary deserialization method, called in cases where POJO instance is created as part of deserialization, potentially after collecting some or all of the properties to set.- Overrides:
deserializein classJsonDeserializer<Object>- Throws:
IOExceptionJsonProcessingException
-
deserializeWithType
public Object deserializeWithType(JsonParser jp, DeserializationContext ctxt, TypeDeserializer typeDeserializer) throws IOException, JsonProcessingException Description copied from class:StdDeserializerBase 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:
deserializeWithTypein classStdDeserializer<Object>- Parameters:
typeDeserializer- Deserializer to use for handling type information- Throws:
IOExceptionJsonProcessingException
-
deserializeFromObject
public Object deserializeFromObject(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException - Throws:
IOExceptionJsonProcessingException
-
deserializeFromObjectUsingNonDefault
protected Object deserializeFromObjectUsingNonDefault(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException - Throws:
IOExceptionJsonProcessingException- Since:
- 1.9
-
deserializeFromString
public Object deserializeFromString(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException - Throws:
IOExceptionJsonProcessingException
-
deserializeFromNumber
public Object deserializeFromNumber(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException - Throws:
IOExceptionJsonProcessingException
-
deserializeFromDouble
public Object deserializeFromDouble(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException Method called to deserialize POJO value from a JSON floating-point number.- Throws:
IOExceptionJsonProcessingException- Since:
- 1.9
-
deserializeFromBoolean
public Object deserializeFromBoolean(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException Method called to deserialize POJO value from a JSON boolean value (true, false)- Throws:
IOExceptionJsonProcessingException- Since:
- 1.9
-
deserializeFromArray
public Object deserializeFromArray(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException - Throws:
IOExceptionJsonProcessingException- Since:
- 1.9
-
_deserializeUsingPropertyBased
protected final Object _deserializeUsingPropertyBased(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException Method called to deserialize bean using "property-based creator": this means that a non-default constructor or factory method is called, and then possibly other setters. The trick is that values for creator method need to be buffered, first; and due to non-guaranteed ordering possibly some other properties as well.- Throws:
IOExceptionJsonProcessingException- Since:
- 1.2
-
handlePolymorphic
protected Object handlePolymorphic(JsonParser jp, DeserializationContext ctxt, Object bean, TokenBuffer unknownTokens) throws IOException, JsonProcessingException 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:
jp- (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:
IOExceptionJsonProcessingException
-
deserializeWithUnwrapped
protected Object deserializeWithUnwrapped(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException Method called when there are declared "unwrapped" properties which need special handling- Throws:
IOExceptionJsonProcessingException
-
deserializeWithUnwrapped
protected Object deserializeWithUnwrapped(JsonParser jp, DeserializationContext ctxt, Object bean) throws IOException, JsonProcessingException - Throws:
IOExceptionJsonProcessingException
-
deserializeUsingPropertyBasedWithUnwrapped
protected Object deserializeUsingPropertyBasedWithUnwrapped(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException - Throws:
IOExceptionJsonProcessingException
-
deserializeWithExternalTypeId
protected Object deserializeWithExternalTypeId(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException - Throws:
IOExceptionJsonProcessingException
-
deserializeWithExternalTypeId
protected Object deserializeWithExternalTypeId(JsonParser jp, DeserializationContext ctxt, Object bean) throws IOException, JsonProcessingException - Throws:
IOExceptionJsonProcessingException
-
deserializeUsingPropertyBasedWithExternalTypeId
protected Object deserializeUsingPropertyBasedWithExternalTypeId(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException - Throws:
IOExceptionJsonProcessingException
-
injectValues
protected void injectValues(DeserializationContext ctxt, Object bean) throws IOException, JsonProcessingException - Throws:
IOExceptionJsonProcessingException
-
handleUnknownProperty
protected void handleUnknownProperty(JsonParser jp, DeserializationContext ctxt, Object beanOrClass, String propName) throws IOException, JsonProcessingException Method called when a JSON property is encountered that has not matching setter, any-setter or field, and thus can not be assigned.- Overrides:
handleUnknownPropertyin classStdDeserializer<Object>- Parameters:
jp- 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 can not be mapped- Throws:
IOExceptionJsonProcessingException
-
handleUnknownProperties
protected Object handleUnknownProperties(DeserializationContext ctxt, Object bean, TokenBuffer unknownTokens) throws IOException, JsonProcessingException Method called to handle set of one or more unknown properties, stored in their entirety in givenTokenBuffer(as field entries, name and value).- Throws:
IOExceptionJsonProcessingException
-
_findSubclassDeserializer
protected JsonDeserializer<Object> _findSubclassDeserializer(DeserializationContext ctxt, Object bean, TokenBuffer unknownTokens) throws IOException, JsonProcessingException Helper method called to (try to) locate deserializer for given sub-type of type that this deserializer handles.- Throws:
IOExceptionJsonProcessingException
-
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
JsonMappingExceptionare to be passed as is
- Throws:
IOException
-
wrapAndThrow
public void wrapAndThrow(Throwable t, Object bean, int index, DeserializationContext ctxt) throws IOException - Throws:
IOException
-
wrapInstantiationProblem
protected void wrapInstantiationProblem(Throwable t, DeserializationContext ctxt) throws IOException - Throws:
IOException
-
wrapAndThrow
Deprecated.Since 1.7 use variant that takesDeserializationContext- Throws:
IOException
-
wrapAndThrow
Deprecated.Since 1.7 use variant that takesDeserializationContext- Throws:
IOException
-
ValueInstantiatorinstead