Springでのパス変数の受け取り方、リダイレクト先への渡し方メモ
パス変数を受け取る方法
// (1)
@GetMapping("{name}")
public String detail(@PathVariable String name) {
return "detail";
}
// (2)
@GetMapping("idol/{name}")
public String idolDetail(@PathVariable("name") String idolName) {
return "idol/detail";
}
// (3)
@GetMapping("unit/{unitId}/idol/{idolId}")
public String idolDetail(@PathVariable("unitId") Integer unitId, @PathVariable("idolId") Integer idolId) {
return "idol/detail";
}
パス内に含まれる値をメソッドの処理内で利用したい場合は、Mappingアノテーション内の受け取りたい値が入る箇所をパス変数({変数名}
)の形式とし、それに対応する引数に@PathVariable
を指定する。
(1) パス変数名と実際に利用する変数名が同じ場合は@PathVariable
のvalue属性を省略できる。
(2) 変数名が異なる場合は@PathVariable
のvalue属性にパス変数名を指定する。
(3) 複数も可。
パス変数をリダイレクト先へ渡す方法
// (1)
@PostMapping("idol/{name}/update")
public String update(@PathVariable String name) {
return "redirect:/idol/{name}";
}
// (2)
@PostMapping("redirect")
public String redirect(RedirectAttributes redirectAttributes) {
redirectAttributes.addAttribute("name", "大崎甜花");
return "redirect:/idol/{name}";
}
(1)
一度パス変数として受け取った変数はそのままリダイレクト先へ渡すことができる。
上記のコードの場合、/idol/幽谷霧子/update
へPOSTリクエストを送ると結果としてリダイレクト先のURLは/idol/幽谷霧子
となる。
(2)
RedirectAttributesのaddAttribute
メソッドを利用して追加した変数がリダイレクト先のパス変数に含まれる場合はそのままパス変数として展開される。
上記の場合だとリダイレクト先のURLは/idol/大崎甜花
となる。
(2)は別で値を入れる必要がないなら単純な文字列結合などでも良いかもしれない。
参考
公式リファレンス
Spring MVC コントローラの引数
Spring徹底入門 Spring FrameworkによるJavaアプリケーション開発