똑같은 삽질은 2번 하지 말자

Redirect parameter ? How are you going to spend it? 본문

Spring

Redirect parameter ? How are you going to spend it?

곽빵 2020. 4. 23. 13:52

リダイレクト先へ動的にリクエストパラメータを設定したい場合は、引数のRedirectAttributesオブジェクトに渡したい値を追加する。

@RequestMapping("hello") public String hello(RedirectAttributes redirectAttrs) { String id = "aaaa"; redirectAttrs.addAttribute("id", id); // (1) // must not return "redirect:/sample/hello?complete&id=" + id; return "redirect:/sample/hello?complete"; }

項番説明
@RequestMapping("hello") 
public String hello(RedirectAttributes redirectAttrs) { 
	String id = "aaaa"; 
	redirectAttrs.addAttribute("id", id); 
	// (1) // must not return "redirect:/sample/hello?complete&id=" + id; 
	return "redirect:/sample/hello?complete"; }
}

属性名にリクエストパラメータ名、属性値にリクエストパラメータの値を指定して、RedirectAttributesオブジェクトのaddAttributeメソッドを呼び出す。

上記例では、 "/sample/hello?complete&id=aaaa" にリダイレクトされる。

 

Warning

上記例ではコメント化しているが、return "redirect:/sample/hello?complete&id=" + id;と結果は同じになる。

ただし、 RedirectAttributesオブジェクトのaddAttributeメソッドを用いるとURIエンコーディングも行われるので、

動的に埋め込むリクエストパラメータについては、返り値のリダイレクトURLとして組み立てるのではなく、必ずaddAttributeメソッドを使用してリクエストパラメータに設定すること 

動的に埋め込まないリクエストパラメータ(上記例だと”complete”)については、

返り値のリダイレクトURLに直接指定してよい。

Comments