Polymorphisme dans jackson annotations: @jsontypeinfo usage
je voudrais savoir si @JsonTypeInfo
l'annotation peut être utilisée pour les interfaces. J'ai un ensemble de classes qui devraient ê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
mise en oeuvre MyInt
. Certaines classes de modèles ont la référence d'interface pour les types d'implémentation. Je voudrais desérialiser les objets en fonction du 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'ai le JsonMappingException
:
Unexpected token( END_OBJECT), expected FIELD_NAME: need JSON String qui contient le type id
1 réponses
@JsonSubTypes.Le Type doit avoir une valeur et un nom comme ça,
@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, utiliser @JsonTypeName("dog")
pour dire le nom.
les valeurs 'dog' et 'cat' seront définies dans la propriété nommée 'type'.