エキサイト株式会社の中です。
Spring BootでCookieの値を取得する時、Controllerで
@CookieValue(name = "hoge", required = false) String hoge
で取得できると思います。
しかし、Stringで受け取る際、勝手にURLデコードされて困る場合があります。
そこで、URLデコードせずに受け取る方法を説明します。
結論から申しますと、Cookieオブジェクトで取得する方法です。
ユースケース
- Cookieの値を取得したい。
- URLデコードされたくない
題材
コード例
@GetMapping("test") public String test( @CookieValue(name = "hoge", required = false) String hoge ) { return hoge; }
入力例
Cookieは以下を設定。
hoge=hogehoge%0D%0Ahogehoge; Path=/; Expires=Sun, 10 Apr 2022 01:47:34 GMT;
出力例
%0D%0A→\r\nに自動的に変換されている
条件
- URLデコードできる文字列をCookieに設定する
改善
コード例
@GetMapping("test") public String test( @CookieValue(name = "hoge", required = false) Cookie hoge ) { return hoge.getValue(); }
Cookieで取得し、getValue()で中身を返却
入力例
Cookieは同様な設定をする
出力例
エンコードされていないことがわかる。
まとめ
URLデコードされたくないケースはそんなにないかもしれませんが、 覚えておいて損はないかと思います。