【发布时间】:2021-09-01 15:28:44
【问题描述】:
我被困在仅使用 Jackson 装饰器“简单的方法”将 json 映射到我的数据结构中,我想知道是否有办法做到这一点......
我尝试读取的 json 具有以下结构:
{
"animals": [
{"data_info":{"ns":"dog"}, "sound":"bowwow", "bites":True},
{"data_info":{"ns":"dog"}, "sound":"woofWoof", "bites":False},
{"data_info":{"ns":"cat"}, "sound":"meeeOwww", "age":5}
],
"data_info":{"ns":"animal"}
}
所以基本上每个数据实体都有一个“data_info”对象(在我的代码中从下面映射到 DataTypeInfo),它有一个包含对象类型的属性“ns”对象(在我的代码 TypeInfo 中映射)。所以这意味着对象类型的判别器总是在data_info.ns下
这是我的数据实体:
public class Animals extends DataTypeInfo {
@JsonProperty("animals")
List<Mamals> animals;
}
@JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "data_info.ns")
@JsonSubTypes({
@JsonSubTypes.Type(value = Cat.class, name = "cat"),
@JsonSubTypes.Type(value = Dog.class, name = "dog"),
})
public abstract class Mamals extends DataTypeInfo {
}
public class Cat extends Mammals {
@JsonProperty("sound")
private String sound;
@JsonProperty("age")
private in age;
}
public class Dog extends Mammals {
@JsonProperty("sound")
private String sound;
@JsonProperty("bites")
boolean bites
}
public class DataTypeInfo {
@JsonProperty("data_info")
TypeInfo typeInfo;
}
public class TypeInfo {
@JsonProperty("ns")
String nameSpace;
}
我的代码中的错误是来自 Mammals 类的鉴别器:property = "data_info.ns" 因为这是为了使用属性,但我尝试使用子属性... 有没有办法正确声明 Mammal 抽象类的鉴别器,以便实例化正确的 Dog 或 Cat 对象?
【问题讨论】:
标签: java json jackson jackson-databind