Class BaseNodeDeserializer<T extends JsonNode>

java.lang.Object
tools.jackson.databind.ValueDeserializer<T>
tools.jackson.databind.deser.std.StdDeserializer<T>
tools.jackson.databind.deser.jackson.BaseNodeDeserializer<T>
All Implemented Interfaces:
NullValueProvider, ValueInstantiator.Gettable
Direct Known Subclasses:
JsonNodeDeserializer

public abstract class BaseNodeDeserializer<T extends JsonNode> extends StdDeserializer<T>
Base class for all actual JsonNode deserializer implementations. Uses iteration instead of recursion: this allows handling of very deeply nested input structures.

This class should only be extended by internal Jackson deserializers. It is not intended to be used by custom deserializers.

  • Field Details

    • _supportsUpdates

      protected final Boolean _supportsUpdates
    • _mergeArrays

      protected final boolean _mergeArrays
    • _mergeObjects

      protected final boolean _mergeObjects
  • Constructor Details

    • BaseNodeDeserializer

      public BaseNodeDeserializer(Class<T> vc, Boolean supportsUpdates)
    • BaseNodeDeserializer

      protected BaseNodeDeserializer(BaseNodeDeserializer<?> base, boolean mergeArrays, boolean mergeObjects)
  • Method Details

    • deserializeWithType

      public Object deserializeWithType(tools.jackson.core.JsonParser p, DeserializationContext ctxt, TypeDeserializer typeDeserializer) throws tools.jackson.core.JacksonException
      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 class StdDeserializer<T extends JsonNode>
      typeDeserializer - Deserializer to use for handling type information
      Throws:
      tools.jackson.core.JacksonException
    • logicalType

      public LogicalType logicalType()
      Description copied from class: ValueDeserializer
      Method for accessing logical type of values this deserializer produces. Typically used for further configuring handling of values, for example, to find which coercions are legal.
      Overrides:
      logicalType in class ValueDeserializer<T extends JsonNode>
      Returns:
      Logical type of values this deserializer produces, if known; null if not
    • isCachable

      public boolean isCachable()
      Description copied from class: ValueDeserializer
      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 contextualized on per-property basis (but note that ValueDeserializer.resolve(DeserializationContext)d just once!) 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 class ValueDeserializer<T extends JsonNode>
    • supportsUpdate

      public Boolean supportsUpdate(DeserializationConfig config)
      Description copied from class: ValueDeserializer
      Introspection method that may be called to see whether deserializer supports update of an existing value (aka "merging") or not. Return value should either be Boolean.FALSE if update is not supported at all (immutable values); Boolean.TRUE if update should usually work (regular POJOs, for example), or null 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 deserializer construction if explicit attempt made) if Boolean.FALSE returned, or inclusion if Boolean.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 class ValueDeserializer<T extends JsonNode>
    • createContextual

      public ValueDeserializer<?> createContextual(DeserializationContext ctxt, BeanProperty property)
      Description copied from class: ValueDeserializer
      Method called to see if a different (or differently configured) deserializer is needed to deserialize values of specified property. Note that instance that this method is called on is typically shared one and as a result method should NOT modify this instance but rather construct and return a new instance. This instance should only be returned as-is, in case it is already suitable for use.
      Overrides:
      createContextual in class ValueDeserializer<T extends JsonNode>
      Parameters:
      ctxt - Deserialization context to access configuration, additional deserializers that may be needed by this deserializer
      property - 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.
    • _createWithMerge

      protected abstract BaseNodeDeserializer<?> _createWithMerge(boolean mergeArrays, boolean mergeObjects)
    • _handleDuplicateProperty

      protected void _handleDuplicateProperty(tools.jackson.core.JsonParser p, DeserializationContext ctxt, JsonNodeFactory nodeFactory, String propName, ObjectNode objectNode, JsonNode oldValue, JsonNode newValue) throws tools.jackson.core.JacksonException
      Method called when there is a duplicate value for an Object property. By default we don't care, and the last value is used. Can be overridden to provide alternate handling, such as throwing an exception, or choosing different strategy for combining values or choosing which one to keep.
      Parameters:
      propName - Name of the property for which duplicate value was found
      objectNode - Object node that contains values
      oldValue - Value that existed for the object node before newValue was added
      newValue - Newly added value just added to the object node
      Throws:
      tools.jackson.core.JacksonException
    • _deserializeObjectAtName

      protected final ObjectNode _deserializeObjectAtName(tools.jackson.core.JsonParser p, DeserializationContext ctxt, JsonNodeFactory nodeFactory, tools.jackson.databind.deser.jackson.BaseNodeDeserializer.ContainerStack stack) throws tools.jackson.core.JacksonException
      Alternate deserialization method used when parser already points to first PROPERTY_NAME and not START_OBJECT.
      Throws:
      tools.jackson.core.JacksonException
    • updateObject

      protected final JsonNode updateObject(tools.jackson.core.JsonParser p, DeserializationContext ctxt, ObjectNode node, tools.jackson.databind.deser.jackson.BaseNodeDeserializer.ContainerStack stack) throws tools.jackson.core.JacksonException
      Alternate deserialization method that is to update existing ObjectNode if possible.
      Throws:
      tools.jackson.core.JacksonException
    • _deserializeContainerNoRecursion

      protected final ContainerNode<?> _deserializeContainerNoRecursion(tools.jackson.core.JsonParser p, DeserializationContext ctxt, JsonNodeFactory nodeFactory, tools.jackson.databind.deser.jackson.BaseNodeDeserializer.ContainerStack stack, ContainerNode<?> root) throws tools.jackson.core.JacksonException
      Throws:
      tools.jackson.core.JacksonException
    • _deserializeAnyScalar

      protected final JsonNode _deserializeAnyScalar(tools.jackson.core.JsonParser p, DeserializationContext ctxt) throws tools.jackson.core.JacksonException
      Throws:
      tools.jackson.core.JacksonException
    • _deserializeRareScalar

      protected final JsonNode _deserializeRareScalar(tools.jackson.core.JsonParser p, DeserializationContext ctxt) throws tools.jackson.core.JacksonException
      Throws:
      tools.jackson.core.JacksonException
    • _fromInt

      protected final JsonNode _fromInt(tools.jackson.core.JsonParser p, int coercionFeatures, JsonNodeFactory nodeFactory) throws tools.jackson.core.JacksonException
      Throws:
      tools.jackson.core.JacksonException
    • _fromInt

      protected final JsonNode _fromInt(tools.jackson.core.JsonParser p, DeserializationContext ctxt, JsonNodeFactory nodeFactory) throws tools.jackson.core.JacksonException
      Throws:
      tools.jackson.core.JacksonException
    • _fromFloat

      protected final JsonNode _fromFloat(tools.jackson.core.JsonParser p, DeserializationContext ctxt, JsonNodeFactory nodeFactory) throws tools.jackson.core.JacksonException
      Throws:
      tools.jackson.core.JacksonException
    • _normalize

      protected BigDecimal _normalize(BigDecimal nr)
    • _fromEmbedded

      protected final JsonNode _fromEmbedded(tools.jackson.core.JsonParser p, DeserializationContext ctxt) throws tools.jackson.core.JacksonException
      Throws:
      tools.jackson.core.JacksonException