LoginSignup
12
10

More than 3 years have passed since last update.

よくあるやり方は、HttpServletRequestからgetCookiesしてそこから取り出すというやり方でした。
以下のような形です。

CookieController.java
    @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をセットします。

CookieController.java

    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のキー値です。

CookieController.java

    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から取得できない場合はデフォルト値を指定することが可能となります。

CookieController.java

    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;
    }

以上です。

12
10
0

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
12
10