1. ホーム
  2. java

[解決済み] Springの@RequestBodyと@ResponseBodyアノテーション

2022-03-10 09:46:03

質問

を説明できる人がいますか? @RequestBody@ResponseBody Spring 3 のアノテーション?これらは何のためにあるのでしょうか?どんな例も素晴らしいでしょう。

どのように解決するのですか?

というセクションがあります。 16.3.3.4 @RequestBodyアノテーションを使用したリクエストボディのマッピング . そして 16.3.3.5 @ResponseBodyアノテーションによる応答本文のマッピング . これらのセクションを参照することをお勧めします。また、関連する @RequestBody javadocsです。 @ResponseBody ジャバドックス

使用例としては、このような感じでしょうか。

JQueryのようなJavaScriptライブラリを使用すると、次のようなJSON-Objectを投稿することになります。

{ "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
}

ここで、もし ジャクソン をクラスパス上に置く(そして <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 コンポジットアノテーション それ自体は メタアノテーション @Controller@ResponseBody を持つコントローラを示すために を継承し、すべてのメソッドが型レベルの @ResponseBody アノテーションを使用しています。 したがって、レスポンスボディに直接書き込むことになります。 とHTMLテンプレートでレンダリングします。