gpt4 book ai didi

java - 基于唯一属性的存在使用 Jackson 反序列化多态类型

转载 作者:行者123 更新时间:2023-12-03 12:03:23 26 4
gpt4 key购买 nike

如果我有这样的类结构:

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;
...
}
是否有另一种方法可以反序列化不同的 @JsonTypeInfo ?在我的父类上使用此注释:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "objectType")
我宁愿不必强制我的 API 的客户端包含 "objectType": "SubClassA"反序列化 Parent子类。
而不是使用 @JsonTypeInfo , Jackson 是否提供了一种方法来注释子类并通过唯一属性将其与其他子类区分开来?在我上面的示例中,这将类似于“如果 JSON 对象具有 "stringA": ... 将其反序列化为 SubClassA ,如果它具有 "stringB": ... 将其反序列化为 SubClassB ”。

最佳答案

这感觉有点像 @JsonTypeInfo@JsonSubTypes应该用于但我已经选择了文档并且可以提供的属性似乎都与您所描述的不匹配。

您可以编写一个使用 @JsonSubTypes 的自定义解串器。 ' "name"和 "value"属性以非标准的方式来完成你想要的。解串器和 @JsonSubTypes将在您的基类上提供,反序列化器将使用“名称”值来检查属性是否存在,如果存在,则将 JSON 反序列化为“值”属性中提供的类。您的类(class)将如下所示:

@JsonDeserialize(using = PropertyPresentDeserializer.class)
@JsonSubTypes({
@Type(name = "stringA", value = SubClassA.class),
@Type(name = "stringB", value = SubClassB.class)
})
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;
...
}

关于java - 基于唯一属性的存在使用 Jackson 反序列化多态类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24263904/

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