可能,但是键入JSON应该看起来像
"type":"com.test.Cat"(完全限定名称)
Abstract类
@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="type")public abstract class AAnimal {}子类
public class Cat extends AAnimal{ public String name;} public class Dog extends AAnimal{ public String name;}现在,对于json
"{ "type":"com.test.Dog", "name":"gav-gav" }"这将是
Dog实例
和
"{ "type":"com.test.Cat", "name":"mew-mew" }"这将是
Cat例如
编辑
在这种情况下使用
JsonTypeInfo.As.EXTERNAL_PROPERTY。例
public class Container { private String type; private AAnimal animal; public String getType() { return type; } public void setType(String type) { this.type = type; } public AAnimal getAnimal() { return animal; } @JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.EXTERNAL_PROPERTY, property="type") public void setAnimal(AAnimal animal) { this.animal = animal; }}动物类
public abstract class AAnimal { public String name;}public class Cat extends AAnimal{}public class Dog extends AAnimal{}对于
"{"type":"com.test.Cat", "animal" : {"name":"cat" }}"它运作良好。
PS。 您也可以使用
use=JsonTypeInfo.Id.MINIMAL_CLASS,在这种情况下,您只能使用标准名称
EDIT2的一部分
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.EXTERNAL_PROPERTY, property="type") @JsonSubTypes({ @Type(value = Cat.class, name = "cat"), @Type(value = Dog.class, name = "dog") }) public void setAnimal(AAnimal animal) { this.animal = animal; }适用于
"{"type":"cat", "animal" : {"name":"cat" }}"


