よくあるやり方は、HttpServletRequestからgetCookiesしてそこから取り出すというやり方でした。
以下のような形です。
@GetMapping("cookies3")
public String showCookies3(HttpServletRequest httpServletRequest) {
Cookie[] cookies = httpServletRequest.getCookies();
Arrays.stream(cookies).forEach(cookie -> System.out.println(cookie.getValue()));
return VIEW_NAME;
}
ただ、Springを利用するともう少し簡単に取得できます。
Cookieの生成
適当にCookieをセットします。
private final String VIEW_NAME = "demo/cookie/index";
@GetMapping("/")
public String index(HttpServletResponse httpServletResponse) {
httpServletResponse.addCookie(new Cookie("key1", "value1"));
return VIEW_NAME;
}
Cookieの取得
以下のようにCookieValueアノテーションを利用することで簡単に取得できます。引数はCookieのキー値です。
private final String VIEW_NAME = "demo/cookie/index";
@GetMapping("cookies1")
public String showCookies1(@CookieValue("key1") String cookieValue) {
System.out.println(cookieValue);
return VIEW_NAME;
}
ただし、上記の書き方だとCookieが削除されるなどして取得できない場合は実行時エラーとなります。
※Resolved [org.springframework.web.bind.MissingRequestCookieException: Missing cookie 'key1' for method parameter of type String])
そのため、以下のように@CookieValueのrequiredをfalseにする(デフォルトはrequired = true)ことで回避可能となります。
ただしこの場合は引数にはnullがセットされるため、defaultValue属性を指定することで、Cookieから取得できない場合はデフォルト値を指定することが可能となります。
private final String VIEW_NAME = "demo/cookie/index";
@GetMapping("cookies2")
public String showCookies2(
@CookieValue(name = "key1", required = false, defaultValue = "default value1") String cookieValue) {
System.out.println(cookieValue);
return VIEW_NAME;
}
以上です。