我正在使用3.8.0版的MongoDB Java驱动程序。
我已经阅读了以下文档:http://mongodb.github.io/mongo-java-driver/3.8/bson/pojos/,目前尚不清楚如何执行此操作。
要解决与JSON完全相同的问题,我将Jackson和@JsonAnyGetter和@JsonAnySetter与地图一起使用。然后,Jackson将透明地反序列化并重新序列化未知字段。
例如,如果我的Pojo定义为:
public static class NflPlayer {
private String id;
private String name;
private String team;
private String position;
private Map<String, Object> unknownProperties = new HashMap<>();
@JsonAnyGetter
public Map<String, Object> getUnknownProperties() {
return unknownProperties;
}
@JsonAnySetter
public void setUnknownProperty(String name, Object value) {
this.unknownProperties.put(name, value);
}
}
我有一个JSON字符串,如:
{"_id": "3", "name": "Aaron Rodgers", "team": "Green Bay Packers", "position": "QB", "height_cm": 198, "weight_kg": 102, "passing": {"yards": 38502, "td": 313}}
我可以反序列化然后重新序列化:
NflPlayer player = objectMapper.readValue(json, NflPlayer.class);
// do stuff with player ...
String resultJson = objectMapper.writeValueAsString(player);
System.out.println(resultJson);
和打印输出仍将包含“ height_cm”,“ weight_kg”和“ passing”字段,即使这些字段未明确定义为NflPlayer的字段。
PojoCodec是否具有类似的功能,或根本没有这样做的任何方法? (或者如果我想要某种保留未知字段的方法,我是否需要忽略PojoCodec并手动将Document对象转换为Pojos?)