【发布时间】:2020-11-10 20:15:06
【问题描述】:
对于多态反序列化,Jackson 的 ObjectMapper 想知道:
- 需要考虑哪些子类型
- 如何决定使用哪个子类型
有一些标准方法,使用完全限定的类名和某些保留的 JSON 属性,因此 Jackson 无需进一步配置即可扣除这些东西。
另一种常见的方法是,通过将注解@JsonTypeInfo 和@JsonSubtypes 添加到基本类型来为Jackson 提供必要的信息。然而,这意味着,无论何时添加新的子类型,都必须修改声明基类的文件。
还可以在运行时通过objectMapper.registerSubtypes(...) 以编程方式将子类型注册到ObjectMapper。
现在我正在寻找一种方法,在运行时以编程方式提供来自 @JsonTypeInfo 的信息,而不使用该注释。
类似于objectMapper.addTypeInfo(new TypeInfo(BaseType.class, PROPERTY, "myPropertyName", NAME); 的东西,所以我可以对另一个项目中声明的类型使用多态反序列化,它对 Jackson 或其任何注释一无所知。
【问题讨论】:
标签: java jackson jackson-databind