如何使用MongoDB Java驱动程序PojoCodec反序列化然后重新序列化未在POJO上定义的字段?

时间:2018-08-10 16:38:14

标签: java mongodb

我正在使用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?)

0 个答案:

没有答案