gpt4 book ai didi

java - 使用 MongoRepository 自定义反序列化器

转载 作者:行者123 更新时间:2023-11-30 06:43:04 25 4
gpt4 key购买 nike

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

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

例如,我正在打电话:

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

我希望数据有一些以自定义方式设置的附加字段(称为派生字段值)。我当然可以直接在上面的数据对象上设置派生字段,但如果我可以在检索时 Hook 反序列化器,那就更干净了。

例如,没有 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. 要添加的字段(当文档反序列化时),在实体 Data 类中将其声明为 @Transient
2. 将其放在您的实体类 @AccessType(PROPERTY) 上。这将确保您的 setter 用于反序列化(默认情况下不会)。因此,当它尝试反序列化(对于非 transient 字段)时,您的 setter 将被调用。您可以从非 transient 字段中为 transient 字段调用 setter。

关于java - 使用 MongoRepository 自定义反序列化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44089133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com