Springmvc パラメータバインディング#
- [アプリケーション] SpringMVC を使用して基本型のパラメータを取得できる。
- [アプリケーション] SpringMVC を使用して POJO 型のパラメータを取得できる。
1、デフォルトでサポートされるパラメータのタイプ#
ハンドラのパラメータに以下のタイプのパラメータを追加すると、アダプタはデフォルトで認識して値を割り当てます。
HttpServletRequest
リクエストオブジェクトを使用してリクエスト情報を取得します。
HttpServletResponse
レスポンス情報を処理するために response を使用します。
HttpSession
セッションオブジェクトを使用してセッションに保存されたオブジェクトを取得します。
Model/ModelMap
Model
Model オブジェクトはデータをページに渡すために使用され、本質的には Request オブジェクトを使用してデータを JSP に渡します。
ModelMap
ModelMap は Model インターフェースの実装クラスであり、ModelMap を使用してデータをページに渡すこともできます。
Model と ModelMap を使用する効果は同じですが、直接 Model を使用する場合、SpringMVC は ModelMap をインスタンス化します。
以下のコード:
@RequestMapping("/quick1")
//デフォルトのパラメータをバインドしてServlet関連のAPIを注入します。
public void quick1(HttpServletRequest request , HttpServletResponse response) throws
ServletException, IOException {
//リクエストスコープにデータを設定します。
request.setAttribute("msg","こんにちは");
//フォワード
request.getRequestDispatcher("/WEB‐INF/jsp/success.jsp").forward(request, response);
}
@RequestMapping("/quick2")
//パラメータを使用してネイティブオブジェクトを注入します。
public String quick2(Model model){
//modelにデータを追加することは、requestスコープにデータを追加することと同じです。
model.addAttribute("msg","頑張って勉強する");
return "success";
}
2、単純なタイプのバインディング#
リクエストのパラメータ名とハンドラのパラメータ名が一致する場合、リクエストパラメータとパラメータがバインドされます。
これにより、リクエストからパラメータを取得するメソッドをさらに簡素化できます。
/
/単純なデータを受け取る
@RequestMapping("/quick3")
//パラメータ名と送信されたデータのキーが一致するように定義します。
public String quick3(int id ,String name){
System.out.println(id);
System.out.println(name);
return "success";
}
2.1.@RequestParam#
- @RequestParam は、単純な型のバインディングによく使用されます。
- value:パラメータ名、つまり入力パラメータのリクエストパラメータ名です。value="itemId" は、リクエストパラメータの名前が itemId のパラメータの値を渡します。
- required:必須かどうか、デフォルトは true で、リクエストに対応するパラメータが必ずあることを意味します。そうでない場合、エラーが発生します。
- HTTP ステータス 400 - 必須の整数パラメータ 'XXXX' が存在しません
- defaultValue:デフォルト値、リクエストに同じ名前のパラメータがない場合のデフォルト値を示します。
3、POJO タイプのバインディング#
3.1 フォームデータを POJO で受け取る
パラメータが多い場合や、フォームに多くの内容がある場合、単純な型でデータを受け取ることもできますし、POJO でデータを受け取ることもできます。
要件:POJO オブジェクトのプロパティ名とフォームの input の name 属性が一致すること。
//POJOタイプのデータを受け取る POJO(単純なJavaオブジェクト)
@RequestMapping("/quick4")
//パラメータ名と送信されたデータのキーが一致するように定義します。
public String quick4(User user){
System.out.println(user);
return "success";
}
3.2 POST の文字化け問題の解決#
POST リクエストの場合、データが文字化けする場合があります。エンコーディングフィルタを設定してエンコーディングをフィルタリングすることができます。
web.xml に次のコードを追加します。
<!‐‐ POSTの文字化け問題を解決する ‐‐>
<filter>
<filter‐name>encoding</filter‐name>
<filter‐class>org.springframework.web.filter.CharacterEncodingFilter</filter‐class>
<!‐‐ エンコーディングはUTF8です ‐‐>
<init‐param>
<param‐name>encoding</param‐name>
<param‐value>UTF‐8</param‐value>
</init‐param>
</filter>
<filter‐mapping>
<filter‐name>encoding</filter‐name>
<url‐pattern>/*</url‐pattern>
</filter‐mapping>
4、Controller メソッドの戻り値#
4.1 文字列形式で戻す#
文字列を直接返す:この方法では、返された文字列はビューリゾルバのプレフィックスとサフィックスと連結されて転送されます。
リダイレクト
@RequestMapping("/quick5")
public String quick5(){
System.out.println("quick5");
return "redirect:/index.jsp";
}
フォワード
/
/フォワード
@RequestMapping("/quick6")
public String quick6(){
System.out.println("quick5");
return "forward:/index.jsp";
}