[英]Java : Parsing Json object to subclass on runtime
我有以下POJO
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(Include.NON_NULL)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include =JsonTypeInfo.As.PROPERTY)
@JsonSubTypes({
@JsonSubTypes.Type(value = Child1.class, name = "Child1"),
@JsonSubTypes.Type(value = Child2.class, name = "Child2")
})
class parent{
string commonFeaure;
}
class child1 extends parent{
String child1Feature;
}
class child2 extends parent{
String child2Feature;
}
解析Json时,我遇到两个问题:
1-我的服务接受一个可能是child1或child2类型的json对象,如何在运行时进行映射,我在json处添加了“ @type”,但我必须在映射处指定子类,例如映射给child1:
ObjectMapper mapper = new ObjectMapper();
Child1 c = mapper.readValue(jsonInput,Child1.class);
如何在不指定代码的强制转换类的情况下使其变得动态?
2-如果一个类的对象是许多其他类的超类,则在解析Json对象时,会将其转换为超类,而@type指定一个子类。
例:
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(Include.NON_NULL)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include =JsonTypeInfo.As.PROPERTY)
@JsonSubTypes({
@JsonSubTypes.Type(value = SubFeature .class, name = "SubFeature ")
})
class X {
Feature x;
}
class Feature {
}
Class SubFeature extends Feature {
}
在Json中,我添加了“ @type”:“ SubFeature”,但是在将其解析为Java类时却将其解析为Feature? 我该如何解决这个问题?
您可以在父类上使用以下注释:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({
@Type(value = SubFeature.class, name = "SubFeature")
})
class Feature {
}
然后
mapper.readValue(jsonInput,Feature.class)
应该返回正确的子类类型。
您可以在这里找到更多信息: 与杰克逊的继承
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.