JavaのSpring FrameworkのMVCのControllerでよく使う基本的なアノテーション@RequestMappingや、@BindingResult、オブジェクトのModelなどを紹介します。
🚕 Controllerの処理対象のパスを指定:@RequestMapping
value属性
Java Spring MVCのControllerの処理対象となるURLを@RequestMappingアノテーションのvalueオプションで指定します。(valueは最初の/は省略できます)
// value で処理対象のパスを指定 |
method属性
GETやPOSTなどのmethodオプションで指定します。
// methodでmethodを指定 |
GET POST, PUT, PATCH, DELETE, HEAD, OPTIONS, TRACEを指定可能です。
🏈 GETリクエストのアノテーション:@GetMapping
@RequestMappingのGETリクエスト用のアノテーションが@GetMappingです。記述の省略と可読性の向上が目的です。
("books") |
🗽 POSTリクエストのアノテーション:@PostMapping
@RequestMappingのPOSTリクエスト用のアノテーションが@PostMappingです。記述の省略と可読性の向上が目的です。
("books/create") |
🤔 RESTパラーメータの受取:@PathVaribable
@PathVaribableは/books/1のようにREST形式のURLのパラメータ1を受け取るのに使います。value属性は省略でき、省略した場合は引数名をパラメータ名と解釈します。
("/books/{id}") |
🐹 リクエストパラーメータの受取:@RequestParam
@RequestParamは?order=priceのようにリクエストパラメータorderを受け取るのに使います。value属性は省略でき、省略した場合は引数名をパラメータ名と解釈します。
("/books") |
🍄 コントローラからビューに値を渡す:ModelMap
コントローラからビューに値を渡すのに、メソッドの仮引数にModelMapを指定する方法があります。
("/books") |
Model、ModelMap、ModelAndViewの簡単な説明です。
| オプション | 説明 |
|---|---|
Model |
ModelはインターフェースでaddAttributeメソッドなどをもつ |
ModelMap |
ModelMapはMAPインターフェースの実装。Mapメソッドをもと |
ModelAndView |
ModelMapとviewオブジェクトのコンテナ |
😼 RequestMappingのアクション前に実行:@ModelAttribute
@ModelAttributeをメソッドにつけるとRequestMappingのアクションを実行する前にそのメソッドが呼び出されます。
(value = "create") |
@ModelAttributeはアクションの引数に付与することもできます。その場合は自動的に同名のフィールドにマッピングされ、リクエストスコープにも設定されます。
🍮 バリデーション結果を格納:@BindingResult
@BindingResultはメソッド引数として直前のフォームオブジェクトのバリデーション結果を格納します。@BindingResultはメソッドの引数の並び順をバリデーション対象の直後にすることが必須なので注意してください。
(value = "create", params = "confirm") |
😎 リダイレクト先にオブジェクトを送る:RedirectAttributes
RedirectAttributesはリダイレクト先にオブジェクトを送るのに使います。
(value = "create") |
RedirectAttributesのaddFlashAttributeとaddAttributeメソッドを紹介します。
| メソッド | 説明 |
|---|---|
addFlashAttribute |
sessionでオブジェクトを送付するため、リダイレクト時に一度だけ有効なデータの受け渡し方になります |
addAttribute |
URLパラメータでオブジェクトを送付するため、その後何度でも有効な文字列となります |
🐡 参考リンク
- 【Spring MVC】@RequestMapping の基本
- java - Combine GET and POST request methods in Spring
- Spring Controllerの@PathVariableと@RequestParamの使い分け
- コントローラからビューに値を渡す
- spring - What are the differences between Model, ModelMap, and ModelAndView?
- Spring MVCのドキュメント「コントローラを実装する」を読む
- FlashScopeという考え方
