gpt4 book ai didi

java - jackson 根据类型反序列化

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:04:11 26 4
gpt4 key购买 nike

假设我有以下格式的 JSON:

{
"type" : "Foo"
"data" : {
"object" : {
"id" : "1"
"fizz" : "bizz"
...
},
"metadata" : {
...
},
"owner" : {
"name" : "John"
...
}
}
}

我试图避免自定义反序列化器并尝试将上述 JSON(称为 Wrapper.java)反序列化为 Java POJO。 “类型”字段指示“对象”反序列化,即。 type = foo 表示使用 Foo.java 反序列化“对象”字段。 (如果 type = Bar,则使用 Bar.java 反序列化对象字段)。元数据/所有者将始终使用一个简单的 Jackson 注释 Java 类以相同的方式反序列化每个。有没有办法使用注释来完成这个?如果没有,如何使用自定义反序列化器完成此操作?

最佳答案

仅注释方法

替代custom deserializer approach ,您可以将以下内容用于仅注释解决方案(类似于 Spunc's answer 中描述的解决方案,但使用 type 作为 external property ):

public abstract class AbstractData {

private Owner owner;

private Metadata metadata;

// Getters and setters
}
public static final class FooData extends AbstractData {

private Foo object;

// Getters and setters
}
public static final class BarData extends AbstractData {

private Bar object;

// Getters and setters
}
public class Wrapper {

private String type;

@JsonTypeInfo(use = Id.NAME, property = "type", include = As.EXTERNAL_PROPERTY)
@JsonSubTypes(value = {
@JsonSubTypes.Type(value = FooData.class, name = "Foo"),
@JsonSubTypes.Type(value = BarData.class, name = "Bar")
})
private AbstractData data;

// Getters and setters
}

在这种方法中,@JsonTypeInfo设置为使用 type 作为 external property确定正确的类来映射 data 属性。

JSON文档可以反序列化如下:

ObjectMapper mapper = new ObjectMapper();
Wrapper wrapper = mapper.readValue(json, Wrapper.class);

关于java - jackson 根据类型反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44122782/

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