繁体   English   中英

Java:在运行时将Json对象解析为子类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM