我正在使用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;
}
答案 0 :(得分:1)
可以做到的一种方法是
1.要添加的字段(在反序列化文档时),在实体@Transient
类中将它们声明为Data
2.将其放在您的实体类@AccessType(PROPERTY)
上。这将确保您的setter用于反序列化(默认情况下不会)。因此,当您尝试反序列化时(非瞬态字段),会调用您的setter。您可以从非瞬态字段中为您的瞬态字段调用setter。