web-dev-qa-db-ja.com

java-spring mvcの名前でcookie値を取得

私はJava spring mvcアプリケーションに取り組んでいます。この方法で、コントローラーのメソッドの1つにCookieを設定しました。

@RequestMapping(value = {"/news"}, method = RequestMethod.GET)
public ModelAndView news(Locale locale, Model model, HttpServletResponse response, HttpServletRequest request) throws Exception {

    ...
    response.setHeader("Set-Cookie", "test=value; Path=/");
    ...

    modelAndView.setViewName("path/to/my/view");
    return modelAndView;
}

これは正常に機能しており、ブラウザコンソールにtestという名前と値 "value"のCookieが表示されます。今、私は他の方法で名前でクッキー値を取得したい。 test Cookieの値を取得するにはどうすればよいですか?

34
hamed

最も簡単な方法は、@CookieValueアノテーションを使用してコントローラーで使用することです。

@RequestMapping("/hello")
public String hello(@CookieValue("foo") String fooCookie) {
    // ...
}

それ以外の場合は、Spring org.springframework.web.util.WebUtilsを使用してサーブレットリクエストから取得できます。

WebUtils.getCookie(HttpServletRequest request, String cookieName)

ところで、質問に貼り付けられたコードは少し洗練される可能性があります。 #setHeader()を使用する代わりに、これははるかにエレガントです。

response.addCookie(new Cookie("test", "value"));
73
meskobalazs

org.springframework.web.util.WebUtils.getCookie(HttpServletRequest, String)を使用することもできます。

9
ryanp
private String getCookieValue(HttpServletRequest req, String cookieName) {
    return Arrays.stream(req.getCookies())
            .filter(c -> c.getName().equals(cookieName))
            .findFirst()
            .map(Cookie::getValue)
            .orElse(null);
}
6
ottercoder

Spring MVCはすでにHttpServletRequestオブジェクトを提供します。Cookie[]を返すgetCookies()メソッドがあるので、それを反復処理できます。

3
bekce
private String extractCookie(HttpServletRequest req) {
            for (Cookie c : req.getCookies()) {
               if (c.getName().equals("myCookie"))
                   return c.getValue();
               }
            return null;
        }
1
Padi

クッキーには値で取得するメソッドがありません

Cookie cookie[]=request.getCookies();
Cookie cook;
String uname="",pass="";
if (cookie != null) {
for (int i = 0; i < cookie.length; i++) {
    cook = cookie[i];
    if(cook.getName().equalsIgnoreCase("loginPayrollUserName"))
            uname=cook.getValue();
    if(cook.getName().equalsIgnoreCase("loginPayrollPassword"))
            pass=cook.getValue();                   
}    
}
0
Vishnu Katpure