一尘不染

Jackson JSON库:如何实例化包含抽象字段的类

json

我想将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);

有没有办法做到这一点,尤其是一行,还是需要更多代码?


阅读 335

收藏
2020-07-27

共1个答案

一尘不染

有多种方法。在1.8版之前,最简单的方法可能是:

@JsonDeserialize(as=Cat.class)
public abstract class AbstractAnimal { ... }

关于基于属性的决定,最好使用进行@JsonTypeInfo,这会自动嵌入(在编写时)并使用类型信息。

类型信息有多种(类名,逻辑类型名)以及包含机制(如所包含的属性,按包装器数组,按包装器对象)。此页面:https :
//github.com/FasterXML/jackson-
docs/wiki/JacksonPolymorphicDeserialization解释了一些概念。

2020-07-27