2015-03-11 11 views
5

Ich verwende Jackson, um eine große Json-Zeichenkette in verschiedene Klassen und Unterklassen umzuwandeln.polymorphe Deserialisierung von JSON mit Jackson, Eigenschaftstyp wird "null"

Ich habe eine Liste von Objekten, die jeweils ein Knotenobjekt, ein letztes Ergebnisobjekt und ein Kind-Array enthalten. Das Children-Array enthält eine Liste von Objekten mit genau der gleichen Einstellung. Dies gilt für 3 oder 4 Schichten.

Der Knoten jeder Schicht hat eine andere Unterklasse, die alle von einer Knotenoberklasse ausgehen. Ich habe den Superknoten mit folgenden Anmerkungen kommentiert:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") 
@JsonSubTypes({ 
    @JsonSubTypes.Type(value = Type1ResponseDto.class, name = "Type1"), 
    @JsonSubTypes.Type(value = Type2ResponseDto.class, name = "Type2"), 
    @JsonSubTypes.Type(value = Type3ResponseDto.class, name = "Type3"), 
    @JsonSubTypes.Type(value = Type4ResponseDto.class, name = "Type4"), 
    @JsonSubTypes.Type(value = Type5ResponseDto.class, name = "Type5") 
}) 

Dies scheint zu arbeiten, da alle Unterklassen zugeordnet bekommen.

Dies führt jedoch dazu, dass die Eigenschaft "type" auf null gesetzt wird.

Irgendwelche Ideen, warum dies passiert?

Antwort

7

Ich brauchte visible=true für den Typ Eigenschaft hinzufügen zu zeigen: zu

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "type",visible = true) 
@JsonSubTypes({ 
    @JsonSubTypes.Type(value = Type1ResponseDto.class,name = "Type1"), 
    @JsonSubTypes.Type(value = Type2ResponseDto.class, name = "Type2"), 
    @JsonSubTypes.Type(value = Type3ResponseDto.class, name = "Type3"), 
    @JsonSubTypes.Type(value = Type4ResponseDto.class, name = "Type4") 
}) 
+0

Welche Version von Jackson hat diese Antwort gelten? Ich benutze 1.9.9 und habe diese Optionen nicht, und ich habe genau dieses Problem. – TheIcemanCometh

+0

2.5.1 @TheIcemanCometh –

Verwandte Themen