我想将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,这会自动嵌入(在编写时)并使用类型信息。
@JsonTypeInfo
类型信息有多种(类名,逻辑类型名)以及包含机制(如所包含的属性,按包装器数组,按包装器对象)。此页面:https : //github.com/FasterXML/jackson- docs/wiki/JacksonPolymorphicDeserialization解释了一些概念。