{ "type":"cat", "animal":{"name":"cat"} }
动物是一种abstract class
.猫与狗是subclass
.
现在我正在尝试convert json to java object
并希望使用"type"来获取子类.
但是类型字段不在列中.
提前致谢 :)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property= "type")
@JsonSubTypes({ @Type(value = Cat.class, name = "cat"),
@Type(value = Dog.class, name = "dog") })
abstract class Animal {
public String name;
}
class Cat extends Animal {
public String name;
}
class Dog extends Animal {
public String name;
}
Run Code Online (Sandbox Code Playgroud)
问题是类型是动物{}.
如果类型在动物{}中,则代码将起作用.但它不是):
这是可能的,但JSON中的类型应该看起来像"type":"com.test.Cat"
(完全限定名称)
抽象类
@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="type")
public abstract class AAnimal
{
}
Run Code Online (Sandbox Code Playgroud)
子类
public class Cat extends AAnimal
{
public String name;
}
public class Dog extends AAnimal
{
public String name;
}
Run Code Online (Sandbox Code Playgroud)
现在,为json
"{ \"type\":\"com.test.Dog\", \"name\":\"gav-gav\" }"
Run Code Online (Sandbox Code Playgroud)
它将是Dog
实例
和
"{ \"type\":\"com.test.Cat\", \"name\":\"mew-mew\" }"
Run Code Online (Sandbox Code Playgroud)
它将是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;
}
}
Run Code Online (Sandbox Code Playgroud)
动物类
public abstract class AAnimal
{
public String name;
}
public class Cat extends AAnimal
{
}
public class Dog extends AAnimal
{
}
Run Code Online (Sandbox Code Playgroud)
对于
"{\"type\":\"com.test.Cat\", \"animal\" : {\"name\":\"cat\" }}"
Run Code Online (Sandbox Code Playgroud)
它运作良好.
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;
}
Run Code Online (Sandbox Code Playgroud)
效果很好
"{\"type\":\"cat\", \"animal\" : {\"name\":\"cat\" }}"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5445 次 |
最近记录: |