2017-05-01 5 views
3

は私が...それは正しいキャッチするために/春のMVCアプリケーションSomoneのが使用できるのHTTPリクエストのをデータバインドすること春MVC:@RequestBody VS @ModelAttribute

を理解しました@ RequestBody

要求はapplication/jsonとしてエンコードされていますか? x-www-form-urlencodedまたはmultipart/form-dataとしてエンコード要求のための

@PostMapping(consumes = "application/json") 
public String handleUpload(@RequestBody UploadCommand command) { 
    // ... 
} 

@ModelAttribute

@PostMapping(consumes = "multipart/form-data") 
public String handleUpload(@ModelAttribute UploadCommand command) { 
    // ... 
} 

質問:春は、これら二つの異なる注釈を持っているため

なぜそれが必要なのか?

これらの注釈の使用例は他にありますか?

注:このstackoverflowの答えは深さに@ModelAttributeについて詳しく説明: 周りに掘った後、前にmentionnedとして @ModelAttribute annotation, when to use it?

+0

...簡単です。 JSONからオブジェクトを作成することは、要求パラメータとのバインドとはまったく異なるものです。したがって、異なる注釈。 –

+0

@M。 Deinum URLのクエリ部分(?..)をModelAttribute(単一のオブジェクト)にマップすることはできますか? – Dachstein

+0

それはそれを行うための '@ ModelAttribute'の全体的なポイントです。クエリパラメータまたはフォームパラメータのいずれかになります。 –

答えて

0

@RequestBodyがoftenly我々は、一般的にデータを変換する必要がRESTコンテキストに関与していますJavaオブジェクト。使用する場合、この注釈は、メッセージのコンバータをシーンの後ろに使用し、Content-Type要求のヘッダーに基づいてスーツメッセージコンバータを選択します。

春は、プロジェクトのクラスパス内のjarに基づいて、いくつかのメッセージコンバータを自動的に事前設定します。両者が全く異なる獣アーカンソーので

@ModelAttribute

+0

一緒に使用するケースはありますか?変換とマッピング? – Dachstein

+0

すべてはあなたが開発しているアプリケーションの種類によって異なります.RESTfulなリソースを提供する場合は '@ RequestBody'は歓迎ですが、' @ ModelAttribute'を必要としない場合は前にデータを変換する必要がないため、それらを使用します。 – akuma8