Annotation used with JsonTypeInfo to indicate sub types of serializable
polymorphic types, and to associate logical names used within JSON content
(which is more portable than using physical Java class names).
Subtypes of the annotated type (annotated class, or property value type
associated with the annotated method). These will be checked recursively
so that types can be defined by only including direct subtypes.
Definition of a subtype, along with optional name. If name is missing, class
of the type will be checked for JsonTypeName annotation; and if that
is also missing or empty, a default
name will be constructed by type id mechanism.
Default name is usually based on class name.