作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我想将 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);
有没有办法做到这一点,尤其是在一行中,还是需要更多代码?
最佳答案
有多种方式;在 1.8 版本之前,最简单的方法可能是:
@JsonDeserialize(as=Cat.class)
public abstract class AbstractAnimal { ... }
关于基于属性的决定,最好使用@JsonTypeInfo
,它会自动嵌入(写入时)和使用类型信息。
有多种类型信息(类名、逻辑类型名),以及包含机制(as-included-property、as-wrapper-array、as-wrapper-object)。本页:https://github.com/FasterXML/jackson-docs/wiki/JacksonPolymorphicDeserialization解释了一些概念。
关于java - jackson JSON 库 : how to instantiate a class that contains abstract fields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5489532/
我是一名优秀的程序员,十分优秀!