誰かがSpring3の@RequestBody
と@ResponseBody
注釈を説明できますか?それらは何のため?どんな例でも素晴らしいでしょう。
4 に答える
ドキュメントには、 16.3.3.4 Mapping the request body with the @RequestBody annotationというセクション全体があります。そして 16.3.3.5 と呼ばれる@ResponseBody アノテーションを使用して応答本文をマッピングします。それらのセクションを参照することをお勧めします。関連項目: @RequestBody
javadocs、@ResponseBody
javadocs
使用例は次のようになります。
JQuery のような JavaScript ライブラリを使用すると、次のような JSON オブジェクトを投稿できます。
{ "firstName" : "Elmer", "lastName" : "Fudd" }
コントローラーのメソッドは次のようになります。
// controller
@ResponseBody @RequestMapping("/description")
public Description getDescription(@RequestBody UserStats stats){
return new Description(stats.getFirstName() + " " + stats.getLastname() + " hates wacky wabbits");
}
// domain / value objects
public class UserStats{
private String firstName;
private String lastName;
// + getters, setters
}
public class Description{
private String description;
// + getters, setters, constructor
}
クラスパスにJacksonがある場合(および<mvc:annotation-driven>
セットアップがある場合)、Spring は受信 JSON を投稿本文から UserStats オブジェクトに変換し (@RequestBody
注釈を追加したため)、返されたオブジェクトを JSON にシリアル化します (追加したため)@ResponseBody
注釈)。したがって、ブラウザ/クライアントには次の JSON 結果が表示されます。
{ "description" : "Elmer Fudd hates wacky wabbits" }
完全な動作例については、私の以前の回答を参照してください: https://stackoverflow.com/a/5908632/342852
注: RequestBody / ResponseBody はもちろん JSON に限定されません。どちらもプレーン テキストや XML を含む複数の形式を処理できますが、JSON はおそらく最も使用される形式です。
アップデート
Spring 4.x 以降、通常は@ResponseBody
メソッド レベルではなく@RestController
クラス レベルで使用し、同じ効果があります。
以下は、 Spring MVCの公式ドキュメントからの引用です。
@RestController
は、それ自体がメタアノテーションが付け られ、すべてのメソッドが型レベルのアノテーションを継承するコントローラーを示す合成アノテーションであり、したがって、ビューの解決と HTML テンプレートを使用したレンダリングに対して、応答本文に直接書き込みます。@Controller
@ResponseBody
@ResponseBody
@RequestBody : HTTP リクエストのボディにメソッド パラメータをバインドする必要があることを示すアノテーション。
例えば:
@RequestMapping(path = "/something", method = RequestMethod.PUT)
public void handle(@RequestBody String body, Writer writer) throws IOException {
writer.write(body);
}
@ResponseBodyアノテーションはメソッドに付けることができ、戻り値の型を HTTP 応答本文に直接書き込む必要があることを示します (モデルに配置したり、ビュー名として解釈したりしないでください)。
例えば:
@RequestMapping(path = "/something", method = RequestMethod.PUT)
public @ResponseBody String helloWorld() {
return "Hello World";
}
または、アノテーションの代わりに@RestControllerアノテーションを使用できます@Controller
。これにより、 を使用する必要がなくなり@ResponseBody
ます。