【发布时间】:2014-04-05 05:58:06
【问题描述】:
我有一些这样的课程:
@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);
cages 中的第一个值应该是LionCage 类型,它是。
问题是cages.get(0).getAnimal() 返回一个LinkedHashMap。我怎样才能让它返回正确的Animal 子类?
我正在使用 Jackson 1。
谢谢!
【问题讨论】:
-
你能把你的getter和setter也放进去吗?
The problem is that cage.getAnimal() returns a LinkedHashMap考虑到animal是Animal,这似乎很奇怪。 -
@SotiriosDelimanolis 是
public Animal getAnimal()。Animal不是一个类。它是一个泛型“类型”,很像Map<K, V>中的K或V。 -
你说得对,错过了
Animal作为类型变量。
标签: java json generics jackson json-deserialization