我有這樣一些類,所以:如何用Jackson反序列化泛型類?
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonSubTypes(
{
@JsonSubTypes.Type(value = LionCage.class, name = "LION"),
@JsonSubTypes.Type(value = TigerCage.class, name = "TIGER"),
}
)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
public abstract class Cage<ANIMAL> {
private AnimalType type;
private ANIMAL animal;
}
public enum AnimalType {
LION, TIGER
}
public LionCage extends Cage<Lion>{
public LionCage(){
super(AnimalType.LION);
}
}
public Lion {
private int maneLength;
}
public class Zoo {
private List<Cage<?>> cages = new LinkedList<Cage<?>>();
}
現在,如果我嘗試做以下操作:
String json = "{cages: [{\"type\": \"LION\", \"animal\": {\"maneLength\" : 10}}]}";
ObjectMapper om = new ObjectMapper();
Cage cage = om.readValue(json, Zoo.class);
在籠子裏的第一個值應該是LionCage
型的,它是。
問題是cages.get(0).getAnimal()
返回LinkedHashMap
。如何才能使其返回正確的Animal
子類?
我使用傑克遜1.
謝謝!
你可以把你的getters和setters?問題是,cage.getAnimal()返回一個LinkedHashMap'這看起來很奇怪,因爲'animal'是一個'Animal'。 –
@SotiriosDelimanolis它是'public Animal getAnimal()'。 「動物」不是一堂課。它是一個泛型「類型」,非常像'Map'中的'K'或'V'。 –
Adam
你完全正確,錯過了'Animal'作爲類型變量。 –