156

誰かがSpring3の@RequestBody@ResponseBody注釈を説明できますか?それらは何のため?どんな例でも素晴らしいでしょう。

4

4 に答える 4

241

ドキュメントには、 16.3.3.4 Mapping the request body with the @RequestBody annotationというセクション全体があります。そして 16.3.3.5 と呼ばれる@ResponseBody アノテーションを使用して応答本文をマッピングします。それらのセクションを参照することをお勧めします。関連項目: @RequestBodyjavadocs、@ResponseBodyjavadocs

使用例は次のようになります。

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

于 2012-07-02T10:37:36.733 に答える
38

@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ます。

詳細については

于 2016-01-13T08:32:36.737 に答える