我正在使用Jackson来解析我无法控制的JSON.JSON看起来像这样:
{
"status":"0"
"type":"type1"
"info": {
// additional fields
}
}
Run Code Online (Sandbox Code Playgroud)
我的班级看起来像这样
public class Response {
private String status;
private String type;
private Info info
}
Run Code Online (Sandbox Code Playgroud)
我使用的Info的子类取决于type属性,所以我对info的映射是
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXTERNAL_PROPERTY, property = "type")
@JsonSubTypes(value = {
@JsonSubTypes.Type(value = Type1Info.class, name = "type1"),
@JsonSubTypes.Type(value = Type2Info.class, name = "type2") })
public abstract class Info {
// some fields
}
Run Code Online (Sandbox Code Playgroud)
据我所知,当区别元素与必须被转换的元素处于同一级别时,这是使用类型信息的正确方法.但这不起作用,我总是得到同样的错误:
com.fasterxml.jackson.databind.JsonMappingException:意外的标记(END_OBJECT),期望的FIELD_NAME:缺少属性'type',包含类型id
如果我将EXTERNAL_PROPERTY更改为PROPERTY,我仍会得到相同的错误.我对EXTERNAL_PROPERTY的理解是错误的吗?
我有一个带有动态attribute子项的 json,如下所示:
{
"label":"Some label",
"attribute": { <--- Dynamic attribute object
"type": "TEXT", <--- Field used to map `attribute` dynamic (inside child object)
"languages":[
{
"language":"en_EN",
"text":"do you approve?"
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
或者
{
"label":"Some label",
"attribute": {
"type": "NUMBER",
"value: "10.0"
}
}
Run Code Online (Sandbox Code Playgroud)
我可以使用@JsonSubTypes以下代码正确反序列化上面的 json:
{
"label":"Some label",
"attribute": { <--- Dynamic attribute object
"type": "TEXT", <--- Field used to map `attribute` dynamic (inside child object)
"languages":[
{
"language":"en_EN",
"text":"do you approve?"
}
] …Run Code Online (Sandbox Code Playgroud)