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.jsontype.TypeDeserializer;
import com.fasterxml.jackson.databind.type.LogicalType;
import com.fasterxml.jackson.databind.util.AccessPattern;
Base class for deserializers that handle types that are serialized
as JSON scalars (non-structured, i.e. non-Object, non-Array, values).
/**
* Base class for deserializers that handle types that are serialized
* as JSON scalars (non-structured, i.e. non-Object, non-Array, values).
*/
public abstract class StdScalarDeserializer<T> extends StdDeserializer<T>
{
private static final long serialVersionUID = 1L;
protected StdScalarDeserializer(Class<?> vc) { super(vc); }
protected StdScalarDeserializer(JavaType valueType) { super(valueType); }
// since 2.5
protected StdScalarDeserializer(StdScalarDeserializer<?> src) { super(src); }
/*
/**********************************************************************
/* Overridden accessors
/**********************************************************************
*/
@Override // since 2.12
public LogicalType logicalType() {
return LogicalType.OtherScalar;
}
By default assumption is that scalar types cannot be updated: many are immutable
values (such as primitives and wrappers)
/**
* By default assumption is that scalar types cannot be updated: many are immutable
* values (such as primitives and wrappers)
*/
@Override // since 2.9
public Boolean supportsUpdate(DeserializationConfig config) {
return Boolean.FALSE;
}
// Typically Scalar values have default setting of "nulls as nulls"
@Override
public AccessPattern getNullAccessPattern() {
return AccessPattern.ALWAYS_NULL;
}
// While some scalar types have non-null empty values (hence can't say "ALWAYS_NULL")
// they are mostly immutable, shareable and so constant.
@Override // since 2.9
public AccessPattern getEmptyAccessPattern() {
return AccessPattern.CONSTANT;
}
/*
/**********************************************************************
/* Default deserialization method impls
/**********************************************************************
*/
@Override
public Object deserializeWithType(JsonParser p, DeserializationContext ctxt, TypeDeserializer typeDeserializer) throws IOException {
return typeDeserializer.deserializeTypedFromScalar(p, ctxt);
}
Overridden to simply call deserialize()
method that does not take value
to update, since scalar values are usually non-mergeable.
/**
* Overridden to simply call <code>deserialize()</code> method that does not take value
* to update, since scalar values are usually non-mergeable.
*/
@Override // since 2.9
public T deserialize(JsonParser p, DeserializationContext ctxt, T intoValue) throws IOException {
// 25-Oct-2016, tatu: And if attempt is made, see if we are to complain...
ctxt.handleBadMerge(this);
// if that does not report an exception we can just delegate
return deserialize(p, ctxt);
}
}