下面列出了怎么用com.fasterxml.jackson.databind.deser.impl.ObjectIdReader的API类实例代码及写法,或者点击链接到github查看源代码。
/**
* @since 2.9
*/
protected AbstractDeserializer(AbstractDeserializer base,
ObjectIdReader objectIdReader, Map<String, SettableBeanProperty> props)
{
_baseType = base._baseType;
_backRefProperties = base._backRefProperties;
_acceptString = base._acceptString;
_acceptBoolean = base._acceptBoolean;
_acceptInt = base._acceptInt;
_acceptDouble = base._acceptDouble;
_objectIdReader = objectIdReader;
_properties = props;
}
/**
* @since 2.8
*/
public <T> T reportUnresolvedObjectId(ObjectIdReader oidReader, Object bean)
throws JsonMappingException
{
String msg = String.format("No Object Id found for an instance of %s, to assign to property '%s'",
ClassUtil.classNameOf(bean), oidReader.propertyName);
return reportInputMismatch(oidReader.idProperty, msg);
}
@Override
public ObjectIdReader getObjectIdReader() { return _delegatee.getObjectIdReader(); }
@Override
public JsonDeserializer<?> createContextual(DeserializationContext ctxt,
BeanProperty property) throws JsonMappingException
{
final AnnotationIntrospector intr = ctxt.getAnnotationIntrospector();
if (property != null && intr != null) {
final AnnotatedMember accessor = property.getMember();
if (accessor != null) {
ObjectIdInfo objectIdInfo = intr.findObjectIdInfo(accessor);
if (objectIdInfo != null) { // some code duplication here as well (from BeanDeserializerFactory)
JavaType idType;
ObjectIdGenerator<?> idGen;
SettableBeanProperty idProp = null;
ObjectIdResolver resolver = ctxt.objectIdResolverInstance(accessor, objectIdInfo);
// 2.1: allow modifications by "id ref" annotations as well:
objectIdInfo = intr.findObjectReferenceInfo(accessor, objectIdInfo);
Class<?> implClass = objectIdInfo.getGeneratorType();
if (implClass == ObjectIdGenerators.PropertyGenerator.class) {
PropertyName propName = objectIdInfo.getPropertyName();
idProp = (_properties == null) ? null : _properties.get(propName.getSimpleName());
if (idProp == null) {
ctxt.reportBadDefinition(_baseType, String.format(
"Invalid Object Id definition for %s: cannot find property with name '%s'",
handledType().getName(), propName));
}
idType = idProp.getType();
idGen = new PropertyBasedObjectIdGenerator(objectIdInfo.getScope());
/*
ctxt.reportBadDefinition(_baseType, String.format(
/
"Invalid Object Id definition for abstract type %s: cannot use `PropertyGenerator` on polymorphic types using property annotation",
handledType().getName()));
*/
} else { // other types simpler
resolver = ctxt.objectIdResolverInstance(accessor, objectIdInfo);
JavaType type = ctxt.constructType(implClass);
idType = ctxt.getTypeFactory().findTypeParameters(type, ObjectIdGenerator.class)[0];
idGen = ctxt.objectIdGeneratorInstance(accessor, objectIdInfo);
}
JsonDeserializer<?> deser = ctxt.findRootValueDeserializer(idType);
ObjectIdReader oir = ObjectIdReader.construct(idType, objectIdInfo.getPropertyName(),
idGen, deser, idProp, resolver);
return new AbstractDeserializer(this, oir, null);
}
}
}
if (_properties == null) {
return this;
}
// Need to ensure properties are dropped at this point, regardless
return new AbstractDeserializer(this, _objectIdReader, null);
}
public void setObjectIdReader(ObjectIdReader r) {
_objectIdReader = r;
}
public ObjectIdReader getObjectIdReader() {
return _objectIdReader;
}
EntityBeanDeserializer(BeanDeserializerBase source, ObjectIdReader reader) {
super(source, reader);
}
public DataBinderDeserializer(BeanDeserializerBase source,
ObjectIdReader objectIdReader) {
super(source, objectIdReader);
}
/**
* Accessor that can be used to check whether this deserializer
* is expecting to possibly get an Object Identifier value instead of full value
* serialization, and if so, should be able to resolve it to actual
* Object instance to return as deserialized value.
*<p>
* Default implementation returns null, as support cannot be implemented
* generically. Some standard deserializers (most notably
* {@link com.fasterxml.jackson.databind.deser.BeanDeserializer})
* do implement this feature, and may return reader instance, depending on exact
* configuration of instance (which is based on type, and referring property).
*
* @return ObjectIdReader used for resolving possible Object Identifier
* value, instead of full value serialization, if deserializer can do that;
* null if no Object Id is expected.
*
* @since 2.0
*/
public ObjectIdReader getObjectIdReader() { return null; }
/**
* Overridden to return true for those instances that are
* handling value for which Object Identity handling is enabled
* (either via value type or referring property).
*/
@Override
public ObjectIdReader getObjectIdReader() {
return _objectIdReader;
}
/**
* {@inheritDoc}
*
* Uses {@link DataBinderDeserializer}
*/
@Override
public BeanDeserializerBase withObjectIdReader(ObjectIdReader objectIdReader) {
return new DataBinderDeserializer(this, objectIdReader);
}