我使用Jackson尝试反序列化这个数据结构:
{
"type": "foo", // or "bar", "baz", etc
"name": "number 1",
"params": {
// parameters specific to type 'foo'
}
}
我知道我可以使用自定义反序列化程序,但我想知道是否可以仅使用@JsonType*
注释系列进行此操作?
现在我的课程设置如下:
public class TopLevelObject {
String type;
String name;
AbstractParams params;
}
public class FooParams extends AbstractParams {
String one;
String two;
}
public class BarParams extends AbstractParams {
String three;
String four;
}
abstract public class AbstractParams {
}
如果我将属性移动到@JsonTypeInfo
类,我可以在type
属性上使用AbstractParams
,但在保持{type
类的同时,我似乎无法获得相同的结果{1}}中的{1}}属性。
有什么想法吗?
答案 0 :(得分:1)
可以使用@JsonTypeInfo(use = Id.NAME, include = As.EXTERNAL_PROPERTY)
。但As.EXTERNAL_PROPERTY
只能用于属性。 More info。
因此,您必须在@JsonTypeInfo
类的AbstractParams
字段/ setter上添加TopLevelObject
注释
class TopLevelObject {
public String type;
public String name;
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME,
include= JsonTypeInfo.As.EXTERNAL_PROPERTY,
property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = FooParams.class, name = "foo"),
@JsonSubTypes.Type(value = BarParams.class, name = "bar")})
public AbstractParams params;
}