it-swarm.com.de

Polymorphismus in Jackson-Annotationen: Verwendung von @JsonTypeInfo

Ich würde gerne wissen, ob @JsonTypeInfo Annotation kann für Interfaces verwendet werden. Ich habe eine Reihe von Klassen, die serialisiert und deserialisiert werden sollten.

Folgendes versuche ich zu tun. Ich habe zwei Implementierungsklassen Sub1, Sub2 Implementierung von MyInt. Einige Modellklassen haben die Schnittstellenreferenz für die Implementierungstypen. Ich möchte die Objekte basierend auf Polymorphismus deserialisieren

@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{
}

Ich erhalte das folgende JsonMappingException:

Unerwartetes Token (END_OBJECT), erwartetes FIELD_NAME: JSON-String mit Typ-ID erforderlich

50
Chris

@JsonSubTypes.Type Muss einen Wert und einen Namen wie diesen haben,

@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")       
}) 

Verwenden Sie in der Unterklasse @JsonTypeName("dog"), um den Namen auszusprechen.
Die Werte dog und cat werden in der Eigenschaft type festgelegt.

46
Senthil Kumar