2016-10-19 14 views
0

私は、このエンティティに対していくつかのCRUD操作を提供するデータベースとコントローラで管理されるエンティティを持っています。SpringブートのREST引数のエンティティフィールドを無視する

エンティティの一部のフィールドは、REST APIを使用するフロントエンドによって変更可能であってはなりません。私は単にこの変更不可能なフィールドの値を無視して、代わりにDBの値を使用したいと考えています。

これまで私はコントローラのメソッドでこれを行いましたが、これはエンティティでの作業を行う前に呼び出されました。しかし、このアプローチは私にとっては悪いと感じるので、私は他の解決策を探しました。

コントローラからこの前処理を移動するにはどうすればよいですか?ここで

答えて

1

は、私は私の頭の上の考えることができるソリューションです。

あなたが変更されているあなたのMyObj Entityクラスのフィールドのサブセットを持っているMyObjVmのようなビューモデルクラスを作成することができます。お使いのコントローラでは、あなたがそうのようなMyObjVmオブジェクトを消費することができます

@RequestMapping(//...) 
public String method(Model model, @RequestBody MyObjVm myObjVm) { 
// ... 
// populate the MyObj entity from myObjVm so that only the changeable fields are consumed and assigned. 
} 

上記では、フロントエンドからJSONを消費する方法を示します。

逆の処理を行う場合は、MyObjVmを返すだけです。そのフィールドには、MyObjの変更可能なフィールドが入力されます。あなたのフロントエンドは、返されたJSONを消費するために対応するJSオブジェクトを持つ必要があります。

コントローラからこの前処理を移動するにはどうすればよいですか?

コントローラから抜け出す必要がある処理は、ビューモデルとエンティティ間の変換になります。そのために専用のヘルパークラスメソッドを作成することができます。

+0

これは彼がすでに行っていることではないのですか? – kuhajeyan

+0

dto(ここではゆるやかに使用されている)やビューモデルを使用せずにこの作業を行っている可能性があります。彼は確かに仕事を終わらせるが、コードはきれいではない。ビューモデルを使用すると、変更できないプロパティを無視した目標を達成する必要があります。 –

+0

私は変更したくないフィールドを使わずにdtoを書きました。このようにして、jacksonは単にJSONからの不要な情報を無視し、別のヘルパークラスで変換を行います。 – Ohmen

関連する問題