gpt4 book ai didi

java - 如果枚举映射键为 null 或未知,则忽略 JSON 反序列化

转载 作者:行者123 更新时间:2023-12-01 19:42:00 27 4
gpt4 key购买 nike

我正在尝试使用 Jackson 将 JSON 反序列化为 Java POJO。Json 看起来像

"foo": {
"one": {
"a":1,
"b":"string"
}
"three":{
"a":2
"b":"another"
}
...
}

我想要反序列化的类有这个字段:

public class Myclass {

private Map<MyEnum, MyPojo> foo;

//setter and getter

public static MyPojo {
private int a;
private String b;
}
}

我的枚举类型如下所示:

public enum MyEnum {
one("data1"),two("data2")

@JsonValue
String data;

EnumAttrib(String data) {
this.data = data;
}

private static Map<String, MyEnum> ENUM_MAP = new HashMap();
static {
for (MyEnum a: MyEnum.values()) {
ENUM_MAP.put(a.data, a);
}
}
@JsonCreator
public static MyEnum fromData(String string) {
return ENUM_MAP.get(string);
}
}

只要 JSON 已知由 MyEnum 捕获的 key ,此解决方案就可以正常工作。如果 MyEnum

中未定义某些 JSON 元素,如何从序列化中跳过某些 JSON 元素(在本例中为“ ”)

最佳答案

您需要启用 READ_UNKNOWN_ENUM_VALUES_AS_NULL,该功能在您的 ObjectMapper 上默认处于禁用状态:

ObjectMapper mapper = new ObjectMapper();
mapper.enable(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL);

执行此操作时,结果Map将包含一个条目,其键等于null,值设置为与一个相关的JSON对象未知领域。如果 Not Acceptable ,您需要编写自定义反序列化器或在反序列化过程后删除 null 键。

要解决 Mapnull 键的问题,您还可以在 POJO 中使用 EnumMap:

private EnumMap<MyEnum, MyPojo> foo;

其中 null 键是不允许的,将被跳过。

另请参阅:

关于java - 如果枚举映射键为 null 或未知,则忽略 JSON 反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55053122/

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