com.fitbur.fasterxml.jackson.databind.JsonDeserializer Maven / Gradle / Ivy
package com.fitbur.fasterxml.jackson.databind;
import java.io.IOException;
import java.util.Collection;
import com.fitbur.fasterxml.jackson.core.*;
import com.fitbur.fasterxml.jackson.databind.com.fitburser.impl.ObjectIdReader;
import com.fitbur.fasterxml.jackson.databind.jsontype.TypeDeserializer;
import com.fitbur.fasterxml.jackson.databind.util.NameTransformer;
/**
* Abstract class that com.fitburfines API used by {@link ObjectMapper} (and
* other chained {@link JsonDeserializer}s too) to com.fitburserialize Objects of
* arbitrary types from JSON, using provided {@link JsonParser}.
*
* Custom com.fitburserializers should usually not directly extend this class,
* but instead extend {@link com.fitbur.fasterxml.jackson.databind.com.fitburser.std.StdDeserializer}
* (or its subtypes like {@link com.fitbur.fasterxml.jackson.databind.com.fitburser.std.StdScalarDeserializer}).
*
* If com.fitburserializer is an aggregate one -- meaning it com.fitburlegates handling of some
* of its contents by using other com.fitburserializer(s) -- it typically also needs
* to implement {@link com.fitbur.fasterxml.jackson.databind.com.fitburser.ResolvableDeserializer},
* which can locate com.fitburpendant com.fitburserializers. This is important to allow dynamic
* overrides of com.fitburserializers; separate call interface is needed to separate
* resolution of com.fitburpendant com.fitburserializers (which may have cyclic link back
* to com.fitburserializer itself, directly or indirectly).
*
* In addition, to support per-property annotations (to configure aspects
* of com.fitburserialization on per-property basis), com.fitburserializers may want
* to implement
* {@link com.fitbur.fasterxml.jackson.databind.com.fitburser.ContextualDeserializer},
* which allows specialization of com.fitburserializers: call to
* {@link com.fitbur.fasterxml.jackson.databind.com.fitburser.ContextualDeserializer#createContextual}
* is passed information on property, and can create a newly configured
* com.fitburserializer for handling that particular property.
*
* If both
* {@link com.fitbur.fasterxml.jackson.databind.com.fitburser.ResolvableDeserializer} and
* {@link com.fitbur.fasterxml.jackson.databind.com.fitburser.ContextualDeserializer}
* are implemented, resolution of com.fitburserializers occurs before
* contextualization.
*/
public abstract class JsonDeserializer
{
/*
/**********************************************************
/* Main com.fitburserialization methods
/**********************************************************
*/
/**
* Method that can be called to ask implementation to com.fitburserialize
* JSON content into the value type this serializer handles.
* Returned instance is to be constructed by method itself.
*
* Pre-condition for this method is that the parser points to the
* first event that is part of value to com.fitburserializer (and which
* is never JSON 'null' literal, more on this below): for simple
* types it may be the only value; and for structured types the
* Object start marker.
* Post-condition is that the parser will point to the last
* event that is part of com.fitburserialized value (or in case com.fitburserialization
* fails, event that was not recognized or usable, which may be
* the same event as the one it pointed to upon call).
*
* Note that this method is never called for JSON null literal,
* and thus com.fitburserializers need (and should) not check for it.
*
* @param jp Parsed used for reading JSON content
* @param ctxt Context that can be used to access information about
* this com.fitburserialization activity.
*
* @return Deserializer value
*/
public abstract T com.fitburserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException;
/**
* Alternate com.fitburserialization method (com.fitburpared to the most com.fitburmonly
* used, {@link #com.fitburserialize(JsonParser, DeserializationContext)}),
* which takes in initialized value instance, to be
* configured and/or populated by com.fitburserializer.
* Method is not necessarily used for all supported types; most com.fitburmonly
* it is used
* for Collections and Maps.
*
* Default implementation just throws
* {@link UnsupportedOperationException}, to indicate that types
* that do not explicitly add support do not necessarily support
* update-existing-value operation (esp. immutable types)
*/
public T com.fitburserialize(JsonParser jp, DeserializationContext ctxt,
T intoValue)
throws IOException, JsonProcessingException
{
throw new UnsupportedOperationException("Can not update object of type "+intoValue.getClass().getName());
}
/**
* Deserialization called when type being com.fitburserialized is com.fitburfined to
* contain additional type identifier, to allow for correctly
* instantiating correct subtype. This can be due to annotation on
* type (or its supertype), or due to global settings without
* annotations.
*
* Default implementation may work for some types, but ideally subclasses
* should not rely on current com.fitburfault implementation.
* Implementation is mostly provided to avoid com.fitburpilation errors with older
* code.
*
* @param typeDeserializer Deserializer to use for handling type information
*/
public Object com.fitburserializeWithType(JsonParser jp, DeserializationContext ctxt,
TypeDeserializer typeDeserializer)
throws IOException, JsonProcessingException
{
// We could try calling
return typeDeserializer.com.fitburserializeTypedFromAny(jp, ctxt);
}
/*
/**********************************************************
/* Fluent factory methods for constructing com.fitburcorated versions
/**********************************************************
*/
/**
* Method that will return com.fitburserializer 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
*/
public JsonDeserializer unwrappingDeserializer(NameTransformer unwrapper) {
return this;
}
/**
* Method that can be called to try to replace com.fitburserializer this com.fitburserializer
* com.fitburlegates calls to. If not supported (either this com.fitburserializer does not
* com.fitburlegate anything; or it does not want any changes), should either
* throw {@link UnsupportedOperationException} (if operation does not
* make sense or is not allowed); or return this com.fitburserializer as is.
*
* @since 2.1
*/
public JsonDeserializer> replaceDelegatee(JsonDeserializer> com.fitburlegatee) {
throw new UnsupportedOperationException();
}
/*
/**********************************************************
/* Other accessors
/**********************************************************
*/
/**
* Method that can be called to com.fitburtermine value to be used for
* representing null values (values com.fitburserialized when JSON token
* is {@link JsonToken#VALUE_NULL}). Usually this is simply
* Java null, but for some types (especially primitives) it may be
* necessary to use non-null values.
*
* Note that com.fitburserializers are allowed to call this just once and
* then reuse returned value; that is, method is not guaranteed to
* be called once for each conversion.
*
* Default implementation simply returns null.
*/
public T getNullValue() { return null; }
/**
* Method called to com.fitburtermine value to be used for "empty" values
* (most com.fitburmonly when com.fitburserializing from empty JSON Strings).
* Usually this is same as {@link #getNullValue} (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.
*
* Default implementation simple calls {@link #getNullValue} and
* returns value.
*/
public T getEmptyValue() { return getNullValue(); }
/**
* Method that will
* either return null to indicate that type being com.fitburserializers
* has no concept of properties; or a collection of identifiers
* for which toString
will give external property
* name.
* This is only to be used for error reporting and diagnostics
* purposes (most com.fitburmonly, to accompany "unknown property"
* exception).
*
* @since 2.0
*/
public Collection