繁体   English   中英

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

[英]Deserialized document from mongo missing one field. Using Spring Data Mongo

我有一个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;
    }
}

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

因此,看起来这实际上可能是Spring Data Mongo软件包的缺陷。 我做了一个实验,将文档作为字符串获取,然后使用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);

问题应该是属性名称“ id”,尝试使用其他名称。 默认情况下,Mongo POJOS idProperty将id转换为_id。 此外,还有一个错误,“ Pojo编解码器转换缺少id字段

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM