2017-05-20 3 views
0

私は、SpringBoot、Spring Data、MongoRepositoryを使用してオブジェクトを格納および取得しています。MongoRepositoryを使用したカスタムデシリアライザ

MongoRepositoryを使用する場合、カスタムjsonデシリアライザ(内部デシリアライザの代わりにいくつかの追加作業ができることが好ましいGSON)を提供する方法がありますか?

例えば、私が呼び出しています:私は(派生フィールドの値をそれらを呼び出す)カスタムのようにして設定いくつかの追加のフィールドを持っているデータをご希望の

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

。私は上記のデータオブジェクトに直接派生フィールドを設定することはできますが、取得時にデシリアライザをフックすることができれば、より洗練されたものになります。たとえば、春のデータなしで、私は以下のようにMongoDBのカーソルとフック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

これを行うことができる一つの方法は、あなたがたときに(追加したい
1分野でありますドキュメントはデシリアライズされます)、エンティティ内にという名前を宣言しますDataクラス
2.エンティティクラス@AccessType(PROPERTY)に入れます。これにより、設定者がデシリアライズに使用されます(デフォルトでは設定されません)。だから、あなたのセッターは非シリアル化フィールドのためにデシリアライズしようとするとき呼び出されます。 Transientフィールドのsetterは非transientフィールドから呼び出すことができます。

関連する問題