Module tools.jackson.databind
Package tools.jackson.databind.module
Class SimpleAbstractTypeResolver
java.lang.Object
tools.jackson.databind.AbstractTypeResolver
tools.jackson.databind.module.SimpleAbstractTypeResolver
- All Implemented Interfaces:
Serializable
Simple
AbstractTypeResolver implementation, which is
based on static mapping from abstract super types into
sub types (concrete or abstract), but retaining generic
parameterization.
Can be used for things like specifying which implementation of
Collection to use:
SimpleAbstractTypeResolver resolver = new SimpleAbstractTypeResolver(); // To make all properties declared as Collection, List, to LinkedList resolver.addMapping(Collection.class, LinkedList.class); resolver.addMapping(List.class, LinkedList.class);Can also be used as an alternative to per-class annotations when defining concrete implementations; however, only works with abstract types (since this is only called for abstract types)
- See Also:
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionaddMapping(Class<T> superType, Class<? extends T> subType) Method for adding a mapping from super type to specific subtype.findTypeMapping(DeserializationConfig config, JavaType type) 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.resolveAbstractType(DeserializationConfig config, BeanDescription.Supplier beanDescRef) Method called to try to resolve an abstract type into concrete type (usually for purposes of deserializing), when no concrete implementation was found.
-
Field Details
-
_mappings
Mappings from super types to subtypes
-
-
Constructor Details
-
SimpleAbstractTypeResolver
public SimpleAbstractTypeResolver()
-
-
Method Details
-
addMapping
Method for adding a mapping from super type to specific subtype. Arguments will be checked by method, to ensure thatsuperTypeis abstract (since resolver is never called for concrete classes); as well as to ensure that there is supertype/subtype relationship (to ensure there won't be cycles during resolution).- Parameters:
superType- Abstract type to resolvesubType- Sub-class of superType, to map superTo to- Returns:
- This resolver, to allow chaining of initializations
-
findTypeMapping
Description copied from class:AbstractTypeResolverTry 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 bindingLists).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.
- Overrides:
findTypeMappingin classAbstractTypeResolver- Parameters:
config- Configuration in usetype- Type to find mapping for- Returns:
- Type to map given input type (if mapping found) or
null(if not).
-
resolveAbstractType
public JavaType resolveAbstractType(DeserializationConfig config, BeanDescription.Supplier beanDescRef) Description copied from class:AbstractTypeResolverMethod 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.- Overrides:
resolveAbstractTypein classAbstractTypeResolver- Parameters:
config- Configuration in usebeanDescRef- Description of the POJO type to resolve- Returns:
- 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
-