リソースの部分的更新を実行したい。 @ModelAttribute(既存のリソースを読み込む)と@RequestBodyを組み合わせて、提供されたフィールドに値を設定してから@Validを実行できるという考えがありました。私が理解しているように、@ModelAttributeは何よりも先に呼び出されます。Spring RESTコントローラの部分更新既存リソース
コントローラがModelAttributを呼び出し、ContentPatternエンティティを正しく作成するためにContentPatternConverterを使用しています。それが行われた後、私は@RequestBodyからの提供されたフィールドで "パターン"を設定し、最後にそれが有効かどうかをチェックしたいと思います。私のContentPatternはModelAttributeで作成された後、RequestBodyで埋められません。
@RequestMapping(value = "/patterns/{id}", method = RequestMethod.PUT, produces = "application/json")
@ResponseBody
public ResponseEntity<ContentPattern> updateContentPattern(Principal principal, @ModelAttribute("id") @RequestBody ContentPattern pattern) { //implementation }
私のアプローチを使用してこれを解決する方法や、別の(より良い)解決策がある場合、いくつかのより多くの私は、次の解決策を考え出した研究をした後
UPDATE 1
。
- 私自身の注釈@RequestBodyPathVariable
- がHandlerMethodArgumentResolverを実装RequestBodyPathVariableMethodArgumentResolverを書いて作成しました。 1)URIパス変数(例えば、patterns/{id})に基づいて、カスタムコンバーターから既存のリソースを取得します。 2)要求本体からオブジェクトを生成します。 3)既存のリソースと提供されたリソースをマージします。 4)最終オブジェクトを検証します。 https://gist.github.com/2687913
(より良い/他のマージ方法は、他のケースのために必要になることがあります)
参考リンク::。 http://blog.42.nl/articles/leveraging-the-spring-mvc-3.1-handlermethodargumentresolver-interface ます。http:5)最終オブジェクト
ソースコードを参照の要旨を返します。 //stackoverflow.com/questions/6591665/merging-two-objects-in-java私は(免責事項が、私はこれを試していない)、このことを考え、そしてここで私は何をするのかであるた
ありがとうございます。私は同じコンセプトを使用して終了しましたが、HandlerMethodArgumentResolverを実装しました。 – horte