【发布时间】:2011-07-26 06:17:01
【问题描述】:
我想将 JSON 字符串转换为 java 对象,但该对象的类包含抽象字段,Jackson 无法实例化这些字段,并且不生成该对象。告诉它抽象类的某些默认实现的最简单方法是什么,例如
setDefault(AbstractAnimal.class, Cat.class);
或者根据 JSON 属性名来决定实现类,例如。对于 JSON 对象:
{
...
cat: {...}
...
}
我只想写:
setImpl("cat", Cat.class);
我知道在 Jackson 中可以将类信息嵌入 JSON 中,但我不想使我使用的 JSON 格式复杂化。我想通过设置默认实现类或属性名称('cat')来决定使用哪个类 - 就像你在 XStream 库中编写的那样:
xStream.alias("cat", Cat.class);
有没有办法做到这一点,尤其是在一行中,还是需要更多代码?
【问题讨论】:
-
Java 中没有“抽象字段”之类的东西。
-
我的意思是:
class C { Animal animal; }我想实例化 C,其中 Aniaml 是抽象的,我想在这个字段中放入一个扩展 Animal 的 Cat -
所以没有问题。没有规定变量是抽象类型。
-
可以在 JSON 中嵌入类信息:
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "type")。见 cmets stackoverflow.com/a/32777371/873282
标签: java json jackson deserialization