Java Jackson将额外字段反序列化为映射
我希望将JSON对象中的任何未知字段反序列化为POJO成员的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
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);
}
}