概要
Spring+Thymeleafにおいて、リクエストパラメーターをControllerで受け取るパターンを紹介します。
リクエストパラメーターのパターンは以下の通りです。
・単一(inputタグのType=text, number等を想定)
・複数(複数のinputタグ、またはselectタグを想定)
・単一 & 複数(組み合わさったパターン)
実装例
単一(inputタグのType=text, number等を想定)
@RequestParam
@RequestParamでフィールド名を指定してパラメータを受け取る方法です。
リクエストされるパラメータが少ない(1~2個くらいの)画面からのリクエストで使用される印象があります。
HTML
1 |
<input type="text" name="name"> |
Controller
1 2 |
@GetMapping("/[リクエストURL]") public String [任意](@RequestParam(name = "name") String name) { |
@PathVariable
@PathVariableはパスパラメータでリクエストされる場合に使用します。
WebAPIの実装じおいてパスパラメータを指定するケースで使用される印象があります。
リクエスト
curl http://localhost/search/hoge
Controller
1 2 3 |
@GetMapping("/[リクエストURL]/{name}") public String [任意](@PathVariable("name") String name) { // => name : hoge |
他の指定方法と異なり、URLはパラメータを含める構造になっていることに注意すること。
複数(複数のinputタグ、またはselectタグを想定)
@RequestParam Map<K, V>
画面から単一(type=text等)のリクエストパラメーターを複数個受け取る場合に使用される印象です。
HTML
1 2 3 |
<input type="text" name="name"> <input type="number" name="age"> <textarea name="remarks"></textarea> |
Controller
1 2 |
@GetMapping("/[リクエストURL]") public String [任意](@RequestParam Map<String, String> params) { |
@RequestParam(value = “[リクエストパラメータ名]”) String[]
selectタグでmultipleが有効になっている値をリクエストパラメータとして受け取る場合です。
画面からのリクエストで複数条件をパラメータとしたい場合に使用する印象です。
HTML
1 2 3 4 5 6 7 |
<select multiple="multiple" name="paymentCodes"> <option value=""></option> <option value="1">10回払い</option> <option value="2">20回払い</option> <option value="3">月会員</option> <option value="4">年会員</option> </select> |
Controller
1 2 |
@GetMapping("/[リクエストURL]") public String [任意](@RequestParam(value = "paymentCodes") String[] paymentCodes) { |
単一 & 複数(組み合わさったパターン)
@Validated
@Validatedはバリデーションを実行するためのアノテーションですが、リクエストパラメータのマッピングも行ってくれます。
ただし、マッピング用のオブジェクトを準備することが前提なるため、複雑なリクエストパラメータである場合のみ使用する印象です。
HTML
1 2 3 4 5 6 7 8 9 10 |
<input type="text" name="name"> <input type="number" name="age"> <textarea name="remarks"></textarea> <select multiple="multiple" name="paymentCodes"> <option value=""></option> <option value="1">10回払い</option> <option value="2">20回払い</option> <option value="3">月会員</option> <option value="4">年会員</option> </select> |
マッピング用オブジェクト(Form)
1 2 3 4 5 6 7 8 9 10 |
import java.util.List; import lombok.Data; @Data public class SearchForm { private String name; private String birthdayFrom; private String birthdayTo; private List<String> paymentCodes; } |
Controller
1 2 |
@GetMapping("/[リクエストURL]") public String [任意](@Validated SearchForm form) { |
その他
必須、デフォルト値指定
リクエストパラメータが必須なのか、デフォルト値があるのかを設定することも可能です。
詳しくは以下でまとめられています。
Spring MVC コントローラの引数
まとめ
- リクエストパラメータの複雑さによって、適切な実装をすることが望ましい。
- パスパラメータの場合はURLの構造でパラメータを指定することに注意する。
コメント