Reputation: 281
I am using Jackson to convert a big Json string into various classes and subclasses.
I have a list of objects, each containing a node object, a last result object and a children array. The children array contains a list of objects with exactly the same setup. This goes on for 3 or 4 layers.
Each layers' node is of a different subclass, which all extend from a node superclass. I have annotated the superclass node with following annotations:
@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")
})
This seems to work, since all subclasses get mapped.
However, this somehow results in the "type" property being set to null.
Any ideas as to why this happens?
Upvotes: 7
Views: 2296
Reputation: 281
I needed to add visible=true
for the type property to show up:
@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")
})
Upvotes: 11