package com.fasterxml.jackson.databind.deser.std;

import java.io.IOException;

import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.deser.ResolvableDeserializer;
import com.fasterxml.jackson.databind.jsontype.TypeDeserializer;

Convenience deserializer that may be used to deserialize values given an intermediate tree representation (JsonNode). Note that this is a slightly simplified alternative to StdDelegatingDeserializer).
Type parameters:
  • <T> – Target type of this deserializer; that is, type of values that input data is deserialized into.
Since:2.5
/** * Convenience deserializer that may be used to deserialize values given an * intermediate tree representation ({@link JsonNode}). * Note that this is a slightly simplified alternative to {@link StdDelegatingDeserializer}). * * @param <T> Target type of this deserializer; that is, type of values that * input data is deserialized into. * * @since 2.5 */
public abstract class StdNodeBasedDeserializer<T> extends StdDeserializer<T> implements ResolvableDeserializer { private static final long serialVersionUID = 1L; protected JsonDeserializer<Object> _treeDeserializer; /* /********************************************************** /* Life-cycle /********************************************************** */ protected StdNodeBasedDeserializer(JavaType targetType) { super(targetType); } protected StdNodeBasedDeserializer(Class<T> targetType) { super(targetType); }
"Copy-constructor" used when creating a modified copies, most often if sub-class implements ContextualDeserializer.
/** * "Copy-constructor" used when creating a modified copies, most often * if sub-class implements {@link com.fasterxml.jackson.databind.deser.ContextualDeserializer}. */
protected StdNodeBasedDeserializer(StdNodeBasedDeserializer<?> src) { super(src); _treeDeserializer = src._treeDeserializer; } @Override public void resolve(DeserializationContext ctxt) throws JsonMappingException { _treeDeserializer = ctxt.findRootValueDeserializer(ctxt.constructType(JsonNode.class)); } /* /********************************************************** /* Abstract methods for sub-classes /********************************************************** */ public abstract T convert(JsonNode root, DeserializationContext ctxt) throws IOException; /* /********************************************************** /* JsonDeserializer impl /********************************************************** */ @Override public T deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { JsonNode n = (JsonNode) _treeDeserializer.deserialize(jp, ctxt); return convert(n, ctxt); } @Override public Object deserializeWithType(JsonParser jp, DeserializationContext ctxt, TypeDeserializer td) throws IOException, JsonProcessingException { /* 19-Nov-2014, tatu: Quite likely we'd have some issues but... let's * try, just in case. */ JsonNode n = (JsonNode) _treeDeserializer.deserializeWithType(jp, ctxt, td); return convert(n, ctxt); } }