Java Jackson将额外字段反序列化为映射

Java Jackson将额外字段反序列化为映射,java,json,jackson,deserialization,Java,Json,Jackson,Deserialization,我希望将JSON对象中的任何未知字段反序列化为POJO成员的Map中的条目 例如,以下是JSON: { "knownField" : 5, "unknownField1" : "926f7c2f-1ae2-426b-9f36-4ba042334b68", "unknownField2" : "ed51e59d-a551-4cdc-be69-7d337162b691" } 以下是POJ

我希望将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
}
类MyObject{
国际知识领域;
绘制未知领域地图;
//接球手/二传手
}

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

有一个功能和一个注释正好适合此目的

我进行了测试,它可以与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);
    }
}
更常见的类型(如字符串)也可以工作:

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);
    }
}
class-MyClass{
公共知识领域;
Map unknownFields=new HashMap();
//捕获Jackson与其他成员不匹配的所有其他字段
@JsonAnyGetter
公共映射其他字段(){
返回未知领域;
}
@JSONANYSETER
public void setOtherField(字符串名称、字符串值){
未知字段。put(名称、值);
}
}
()

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);
    }
}