可能,但是键入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" }}"
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)