可能ですが、JSONの入力は"type":"com.test.Cat"
(完全修飾名)
抽象クラス のようになります。
@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
インスタンス
EDITになります。
この場合はを使用します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\" }}"