来自mongo的反序列化文档缺少一个字段。使用Spring Data Mongo

时间:2018-01-24 00:29:41

标签: java spring mongodb serialization

我有一个Mongo集合,其文档如下所示。实际上还有很多其他领域,但alternateIds在结构上是独一无二的,也是一个问题。

{
    "_id": 99999,
    "alternateIds": {
        "id": [{
            "id": "999",
            "idSpace": "SPACE1"
        }]
    }
}

我使用Spring Data Mongo将文档导入POJO,如下所示。

MongoOperations mongoOperations = mongoInstance.getMongoOperations("myMongoDb");

MongoMyDocument myDocument = mongoOperations.findOne(
    new Query(Criteria.where("_id").is(Long.parseLong(idUnderTest))),
    MongoMyDocument.class, "myMongoCollection"
);

接收文档的类如下。同样,实际的POJO还有很多其他字段,但所有其他字段都填充得很好,所以我为了简单起见将它们排除在外。

public class MongoMyDocument {
    private Long id;
    private MongoAlternateIdSegment alternateIds;

    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public MongoAlternateIdSegment getAlternateIds() {
        return alternateIds;
    }
    public void setAlternateIds(MongoAlternateIdSegment alternateIds) {
        this.alternateIds = alternateIds;
    }
}

public class MongoAlternateIdSegment {
    private List<MongoIdSegment> id;

    public List<MongoIdSegment> getId() {
        return id;
    }

    public void setId(List<MongoIdSegment> id) {
        this.id = id;
    }
}

public class MongoIdSegment {
    private String id;
    private String idSpace;

    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getIdSpace() {
        return idSpace;
    }
    public void setIdSpace(String idSpace) {
        this.idSpace = idSpace;
    }
}

当我运行代码时,myDocument对象会使用mongo文档中的所有值正确填充,但字段alternateIds除外。该字段为空。关于我在这里做错了什么的任何想法。使用1.10.9 RELEASE作为Spring Data Mongo版本。

2 个答案:

答案 0 :(得分:0)

所以看起来这可能实际上是Spring Data Mongo包的缺陷。我做了一个实验,我将文档作为String,然后使用GSON将其反序列化到我的目标对象,它工作正常。 alternateIds字段已填充。例如:

String jsonDocument = mongoOperations.findOne(new Query(Criteria.where("_id").is(testId)), String.class, "myMongoCollection");

Gson gson = new Gson();
MongoMyDocument myDocument = gson.fromJson(jsonDocument, MongoMyDocument.class);

答案 1 :(得分:0)

问题应该是属性名称“id”,请尝试使用其他名称。 默认情况下,Mongo POJOS idProperty将id转换为_id。 此外,还有一个错误,“Pojo codec conversion missing id field