我有一个WebClient,它从一个API获取一个响应,其中一个字段是许多其他子类的超类。
public class Animal {
protected String sound;
public Animal() {
}
public String getSound() {
return sound;
}
public void setSound(String sound) {
this.sound = sound;
}
}
字符串
和几个子类(拜托,这只是一个例子)
public class Cat extends Animal {
private String catHouseNumber;
public Cat() {
this.sound = "miau";
}
public String getCatHouseNumber() {
return catHouseNumber;
}
public void setCatHouseNumber(String catHouseNumber) {
this.catHouseNumber = catHouseNumber;
}
}
public class Dog extends Animal {
private String dogDesc;
public Dog() {
this.sound = "guau";
}
public String getDogDesc() {
return dogDesc;
}
public void setDogDesc(String dogDesc) {
this.dogDesc = dogDesc;
}
}
的数据
然后,响应类如下所示
public class AnimalData {
private int id;
private int age;
private int name;
private Animal animalSpec;
public AnimalData() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getName() {
return name;
}
public void setName(int name) {
this.name = name;
}
public Animal getAnimalSpec() {
return animalSpec;
}
public void setAnimalSpec(Animal animalSpec) {
this.animalSpec = animalSpec;
}
}
型
当我使用webclient.get()调用时.我需要将AnimalData类中的“animalSpec”转换为Dog或Cat中的一个
我尝试自定义一个ObjectMapper,但它不工作
1条答案
按热度按时间tzdcorbm1#
要在 AnimalData 类中处理 animalSpec 的多态解析,您需要向Jackson提供有关所使用子类类型的附加信息。这可以使用注解或自定义解析器来实现。
1.添加Jackson注解:在您的 Animal 类中,添加一个 @JsonTypeInfo annotation,其中 use = JsonTypeInfo.Id.NAME 和 include = JsonTypeInfo.As.PROPERTY。这将在JSON中包含一个类型标识符以进行分类。(在这个例子中,我假设JSON中的类型标识符名为“type”。如果在实际JSON中属性的名称不同,您可以相应地调整property属性。)
字符串
1.添加子类型注解:在每个子类(Cat 和 Dog)中,添加一个带有唯一名称的 @JsonTypeName 注解。
型
1.使用ObjectMapper进行初始化:当您收到JSON响应并需要解析时,请使用支持 @JsonTypeInfo 的 ObjectMapper:
型