LoginSignup
2

More than 3 years have passed since last update.

[Spring MVC] パス変数の受け渡し方について

Last updated at Posted at 2019-12-12

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アプリケーション開発

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2