使用MongoRepository的自定义反序列化器

时间:2017-05-20 17:52:51

标签: java mongodb gson spring-data spring-data-mongodb

我正在使用SpringBoot,Spring Data和MongoRepository来存储和检索对象。

使用MongoRepository时,是否有办法提供自定义json反序列化器(最好是GSON,它可以做一些额外的工作而不是内部反序列化器)?

例如,我正在打电话:

Data data = repo.findOne(id); // where repo is a MongoRepository

我希望数据以自定义方式设置一些其他字段(称为派生字段值)。我可以直接在上面的数据对象上设置派生字段,但如果我可以在检索时挂钩反序列化器,它会更清晰。

例如,如果没有spring数据,我可以使用mongodb游标和hook gson反序列化器,如下所示:

public List<Data> getData() {
    Gson gson = new Gson();
    List<Data> dataRecords = new ArrayList<Data>();
    MongoCursor<Document> cursor = db.getCollection("DataCollection").find().iterator();
    try {
        while (cursor.hasNext()) {
            dataRecords.add(gson.fromJson(JSON.serialize(cursor.next()), Data.class));
        }
    } finally {
        cursor.close();
    }

    return dataRecords;
}

1 个答案:

答案 0 :(得分:1)

可以做到的一种方法是  1.要添加的字段(在反序列化文档时),在实体@Transient类中将它们声明为Data  2.将其放在您的实体类@AccessType(PROPERTY)上。这将确保您的setter用于反序列化(默认情况下不会)。因此,当您尝试反序列化时(非瞬态字段),会调用您的setter。您可以从非瞬态字段中为您的瞬态字段调用setter。