Help us understand the problem. What is going on with this article?

SpringでCookieを取得する

よくあるやり方は、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;
    }

以上です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした