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

47
demandé sur jediz 2012-08-03 19:09:36

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'.

43
répondu Senthil Kumar 2012-08-04 04:52:16