gpt4 book ai didi

java - jackson JSON 库 : how to instantiate a class that contains abstract fields

转载 作者:IT老高 更新时间:2023-10-28 12:50:44 25 4
gpt4 key购买 nike

我想将 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com