Je voudrais savoir si @JsonTypeInfo
l'annotation peut être utilisée pour les interfaces. J'ai un ensemble de classes qui doivent être sérialisées et désérialisées.
Voici ce que j'essaie de faire. J'ai deux classes d'implémentation Sub1
, Sub2
implémentation MyInt
. Certaines des classes de modèle ont la référence d'interface pour les types d'implémentation. J'aimerais désérialiser les objets basés sur le polymorphisme
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=As.WRAPPER_OBJECT)
@JsonSubTypes({
@Type(name="sub1", value=Sub1.class),
@Type(name="sub2", value=Sub2.class)})
public interface MyInt{
}
@JsonTypeName("sub1")
public Sub1 implements MyInt{
}
@JsonTypeName("sub2")
public Sub2 implements MyInt{
}
J'obtiens le JsonMappingException
suivant:
Jeton inattendu (END_OBJECT), FIELD_NAME attendu: besoin d'une chaîne JSON contenant l'identifiant de type
@JsonSubTypes.Type
Doit avoir une valeur et un nom comme celui-ci,
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=As.WRAPPER_OBJECT, property="type")
@JsonSubTypes({
@JsonSubTypes.Type(value=Dog.class, name="dog"),
@JsonSubTypes.Type(value=Cat.class, name="cat")
})
Dans la sous-classe, utilisez @JsonTypeName("dog")
pour dire le nom.
Les valeurs dog
et cat
seront définies dans la propriété nommée type
.