gpt4 book ai didi

java - JSON 对象的通用 POJO,可以采用不同类型的值

转载 作者:行者123 更新时间:2023-12-01 16:23:30 25 4
gpt4 key购买 nike

我有一个具有已定义架构的 json 有效负载(rest api 的请求有效负载),但有一个属性可以采用一组未知键值对。每个属性的值可以是不同的类型,如数字、字符串、数组、范围、日期等。我如何为此属性创建 POJO 并使其反序列化工作?

我目前正在考虑为我的 Property 类编写一个自定义反序列化器,在其中检查值的类型并相应地执行一些自定义逻辑。

这看起来是一个典型的要求。我觉得 Jackson 或 Gson 应该有一些我所缺少的东西。如果它已经存在,我很乐意重复使用。我环顾四周,但到目前为止找不到好的答案。如有任何建议,我们将不胜感激。

{
"id": 1234,
"name": "test name 1",
"properties": [
{
"key_a": 100
},
{
"key_b": [
"string1",
"string2",
"string3"
]
},
{
"key_c": {
"range": {
"min": 100,
"max": 1000
}
}
}
]
}

我认为我的属性对象 POJO 看起来像这样。

class Property {
private String key;
private Value value;
}

最佳答案

为此可以使用继承。这是您与 Jackson 的示例的类(class)

public class Sample {

@JsonProperty(value = "id")
Integer id;
@JsonProperty(value = "name")
String name;
@JsonProperty(value = "properties")
List<Property> properties;
}


@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.WRAPPER_OBJECT)
@JsonSubTypes({
@JsonSubTypes.Type(value = KeyA.class, name = "key_a"),
@JsonSubTypes.Type(value = KeyB.class, name = "key_b"),
@JsonSubTypes.Type(value = KeyC.class, name = "key_c")
})
public abstract class Property {
}

public class KeyA extends Property{
Integer value;

public KeyA(Integer value) {
this.value = value;
}
@JsonValue
public Integer getValue() {
return value;
}
}

public class KeyB extends Property {

List<String> valueList;


@JsonCreator
public KeyB( List<String> valueList) {
this.valueList = valueList;
}

@JsonValue
public List<String> getValueList() {
return valueList;
}

}

public class KeyC extends Property {
@JsonProperty(value = "range")
Range value;

}

public class Range {
@JsonProperty(value = "min")
Integer min;
@JsonProperty(value = "max")
Integer max;
}

关于java - JSON 对象的通用 POJO,可以采用不同类型的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62207476/

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