kag*_*ag0 18 java json jackson deserialization
我希望将JSON对象中的任何未知字段反序列化为地图中的条目,该地图是pojo的成员.
例如json
{
"knownField" : 5,
"unknownField1" : "926f7c2f-1ae2-426b-9f36-4ba042334b68",
"unknownField2" : "ed51e59d-a551-4cdc-be69-7d337162b691"
}
Run Code Online (Sandbox Code Playgroud)
和pojo
class myObject{
int knownField;
Map<String, UUID> unknownFields;
// getters/setters whatever
}
Run Code Online (Sandbox Code Playgroud)
有没有办法用杰克逊配置?如果没有,是否有一种有效的方法来编写StdDeserializer它(假设值unknownFields可以是更复杂但众所周知的一致类型)?
Pet*_*erg 28
有一个功能和注释完全符合这个目的.
我测试过它和你的例子中的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);
}
}
Run Code Online (Sandbox Code Playgroud)
它会像这样工作:
MyUUIDClass deserialized = objectMapper.readValue("{" +
"\"knownField\": 1," +
"\"foo\": \"9cfc64e0-9fed-492e-a7a1-ed2350debd95\"" +
"}", MyUUIDClass.class);
Run Code Online (Sandbox Code Playgroud)
更常见的类型如字符串工作:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5395 次 |
| 最近记录: |