私はJax-RSとJooqを使用しています。 スパースデータを使用してREST PATCHを実装する方法を知りたいと思います。JOOqスパースアップデート
私はいくつかのPoJoを持っているとしましょう。 JSON PATCH(http://www.restapitutorial.com/lessons/httpmethods.html)リクエストで、不完全なオブジェクトがリクエストされ、変更されるはずのフィールドのみが含まれています。
どうすればこのようなハンドラを作成できますか?
私は実際のPojoオブジェクトを受け入れようとしました。私の最初の考えは「フィールドがnullの場合は更新しません」でした。これが私の最初の問題でした。
public Resource update(@PathParam("id") UUID id, Resource resource) {
ResourceRecord record = dslContext.newRecord(RESOURCE, resource);
dslContext.update(RESOURCE).set(resource).where(RESOURCE.ID.eq(id)).execute();
// or
memberDao.update(member);
return resourceDao.findById(id);
}
私は事を試してオンラインで検索しているうちに、「意図的に何かをnullに設定するのはどうですか?」と考えました。したがって、要求のフィールドの存在に依存しなければなりません。
私の最後のアイデアは:動作しません
public Resource update(@PathParam("id") UUID id, Map<String, Object> changes) {
dslContext.update(RESOURCE).set(changes).where(RESOURCE.ID.eq(id)).execute();
return resourceDao.findById(id);
}
、もちろん(セット(地図<フィールド、...>))で。
しかし、私はちょっと固まっていて、インターウェブはさまざまな問題の答えがいっぱいでしたが、誰かが同じことを試したことはありませんでした。
私の心の中で私は何らかの畏敬の念を感じる反射とループで遊んでいました。できるだけ簡単にコードを書く方法を知りたいです。
を呼ぶであろう、
DSLContext.newRecord(Table, Object)
にマップを渡すことができます構造体)がクライアントからDBにチェックされません。これはセキュリティ上の脆弱性です。攻撃者はプライベートDBフィールドを推測して変更することができます(例:admin = true)。 – jhyot