gpt4 book ai didi

java - jackson 将额外的字段反序列化为 map

转载 作者:太空狗 更新时间:2023-10-29 22:45:14 29 4
gpt4 key购买 nike

我希望将 JSON 对象中的任何未知字段反序列化为作为 POJO 成员的 Map 中的条目。

例如,这里是 JSON:

{
"knownField" : 5,
"unknownField1" : "926f7c2f-1ae2-426b-9f36-4ba042334b68",
"unknownField2" : "ed51e59d-a551-4cdc-be69-7d337162b691"
}

这是 POJO:

class MyObject {
int knownField;
Map<String, UUID> unknownFields;
// getters/setters whatever
}

有没有办法用 Jackson 配置它?如果不是,是否有编写 StdDeserializer 的有效方法(假设 unknownFields 中的值可以是更复杂但众所周知的一致类型)?

最佳答案

有一个功能和一个注释完全符合这个目的。

我测试过,它可以像您的示例中那样使用 UUID:

class MyUUIDClass {
public int knownField;

Map<String, UUID> unknownFields = new HashMap<>();

// Capture all other fields that Jackson do not match other members
@JsonAnyGetter
public Map<String, UUID> otherFields() {
return unknownFields;
}

@JsonAnySetter
public void setOtherField(String name, UUID value) {
unknownFields.put(name, value);
}
}

它会像这样工作:

    MyUUIDClass deserialized = objectMapper.readValue("{" +
"\"knownField\": 1," +
"\"foo\": \"9cfc64e0-9fed-492e-a7a1-ed2350debd95\"" +
"}", MyUUIDClass.class);

还有更常见的类型,如字符串:

class MyClass {
public int knownField;

Map<String, String> unknownFields = new HashMap<>();

// Capture all other fields that Jackson do not match other members
@JsonAnyGetter
public Map<String, String> otherFields() {
return unknownFields;
}

@JsonAnySetter
public void setOtherField(String name, String value) {
unknownFields.put(name, value);
}
}

(I found this feature in this blog post first)。

关于java - jackson 将额外的字段反序列化为 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39156293/

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