blob: 27175e0c5160364fcdc7bd6e005a182023a0fc1a [file] [log] [blame]
package com.fasterxml.jackson.databind;
/**
* Defines interface for resolvers that can resolve abstract types into concrete
* ones; either by using static mappings, or possibly by materializing
* implementations dynamically.
*/
public abstract class AbstractTypeResolver
{
/**
* Try to locate a subtype for given abstract type, to either resolve
* to a concrete type, or at least to a more-specific (and hopefully supported)
* abstract type, one which may have registered deserializers.
* Method is called before trying to locate registered deserializers
* (as well as standard abstract type defaulting that core Jackson does),
* so it is typically implemented to add custom mappings of common abstract
* types (like specify which concrete implementation to use for binding
* {@link java.util.List}s).
*<p>
* Note that this method does not necessarily have to do full resolution
* of bindings; that is, it is legal to return type that could be further
* resolved: caller is expected to keep calling this method on registered
* resolvers, until a concrete type is located.
*
* @param config Configuration in use; should always be of type
* {@code DeserializationConfig}
*/
public JavaType findTypeMapping(DeserializationConfig config, JavaType type) {
return null;
}
/**
* Older variant of {@link #resolveAbstractType(DeserializationConfig, BeanDescription)};
* obsoleted in 2.7
*
* @deprecated since 2.8 (may be removed from 2.9 or later)
*/
@Deprecated
public JavaType resolveAbstractType(DeserializationConfig config,
JavaType type) {
return null;
}
/**
* Method called to try to resolve an abstract type into
* concrete type (usually for purposes of deserializing),
* when no concrete implementation was found.
* It will be called after checking all other possibilities,
* including defaulting.
*
* @param config Configuration in use; should always be of type
* <code>DeserializationConfig</code>
* @param typeDesc Description of the POJO type to resolve
*
* @return Resolved concrete type (which should retain generic
* type parameters of input type, if any), if resolution succeeds;
* null if resolver does not know how to resolve given type
*
* @since 2.7
*/
public JavaType resolveAbstractType(DeserializationConfig config,
BeanDescription typeDesc) {
return null;
}
}