@Target(value={TYPE,FIELD,METHOD,PARAMETER}) @Retention(value=RUNTIME) public @interface JsonTypeInfo
Some examples of typical annotations:
// Include Java class name ("com.myempl.ImplClass") as JSON property "class" @JsonTypeInfo(use=Id.CLASS, include=As.PROPERTY, property="class") // Include logical type name (defined in impl classes) as wrapper; 2 annotations @JsonTypeInfo(use=Id.NAME, include=As.WRAPPER_OBJECT) @JsonSubTypes({com.myemp.Impl1.class, com.myempl.Impl2.class})Alternatively you can also define fully customized type handling by using
JsonTypeResolver
annotation.
NOTE: originally this annotation was only available to use with types (classes), but starting with 1.7, it is also allowed for properties (fields, methods, constructor parameters).
When used for properties (fields, methods), this annotation applies
to values: so when applied to structure types
(like Collection
, Map
, arrays),
will apply to contained values, not the container;
for non-structured types there is no difference.
This is identical to how JAXB handles type information
annotations; and is chosen since it is the dominant use case.
There is no per-property way to force type information to be included
for type of container (structured type); for container types one has
to use annotation for type declaration.
JsonTypeResolver
Modifier and Type | Required Element and Description |
---|---|
JsonTypeInfo.Id |
use
What kind of type metadata is to be used for serializing and deserializing
type information for instances of annotated type (and its subtypes
unless overridden)
|
Modifier and Type | Optional Element and Description |
---|---|
Class<?> |
defaultImpl
Optional property that can be used to specify default implementation
class to use if type identifier is either not present, or can not
be mapped to a registered type (which can occur for ids, but not when
specifying explicit class to use).
|
JsonTypeInfo.As |
include
What mechanism is used for including type metadata (if any; for
JsonTypeInfo.Id.NONE nothing is included). |
String |
property
Property names used when type inclusion method (
JsonTypeInfo.As.PROPERTY ) is used
(or possibly when using type metadata of type JsonTypeInfo.Id.CUSTOM ). |
public abstract JsonTypeInfo.Id use
public abstract JsonTypeInfo.As include
JsonTypeInfo.Id.NONE
nothing is included). Default
Note that for type metadata type of JsonTypeInfo.Id.CUSTOM
,
this setting may or may not have any effect.
public abstract String property
JsonTypeInfo.As.PROPERTY
) is used
(or possibly when using type metadata of type JsonTypeInfo.Id.CUSTOM
).
Default property name used if this property is not explicitly defined
(or is set to empty String) is based on
type metadata type (use()
) used.
public abstract Class<?> defaultImpl
Note that while this property allows specification of the default implementation to use, it does not help with structural issues that may arise if type information is missing. This means that most often this is used with type-name -based resolution, to cover cases where new sub-types are added, but base type is not changed to reference new sub-types.