如果我有这样的类结构:
public abstract class Parent {
private Long id;
...
}
public class SubClassA extends Parent {
private String stringA;
private Integer intA;
...
}
public class SubClassB extends Parent {
private String stringB;
private Integer intB;
...
}
是否有另一种反序列化不同 then @JsonTypeInfo
的方法?在我的父类上使用此注释:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "objectType")
我宁愿不必强制我的 API 的客户端包含 "objectType": "SubClassA"
来反序列 Parent
子类。
Jackson 没有使用 @JsonTypeInfo
而是提供了一种方法来注释子类并通过唯一属性将其与其他子类区分开来?在我上面的例子中,这类似于,“如果一个 JSON 对象有 "stringA": ...
将它反序列化为 SubClassB
SubClassA
,如果它有 "stringB": ...
-6307a17 反序列化它 ---
”。
原文由 Sam Berry 发布,翻译遵循 CC BY-SA 4.0 许可协议
这感觉像是
@JsonTypeInfo
和@JsonSubTypes
应该用于但我已经通过文档挑选并且可以提供的所有属性似乎都不符合您的描述。您可以编写一个自定义反序列化器,以非标准方式使用
@JsonSubTypes
‘“名称”和“值”属性来完成您想要的。反序列化器和@JsonSubTypes
将在您的基类上提供,反序列化器将使用“名称”值来检查属性是否存在,如果存在,则将 JSON 反序列化到“价值”属性。你的课程看起来像这样: