2015-10-14 41 views
16

我正在研究java spring mvc應用程序。我已經在我的控制器的這樣一種方法設置cookie:java - 在春天的名稱獲取cookie值mvc

@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和價值的「價值」的cookie。現在我想用其他方法通過名稱獲取cookie值。我怎樣才能得到test cookie的價值?

+0

你應該接受任何meskobalazs的或ryanp的答案。 – Frans

+0

你真的應該接受像@Frans所說的答案,它可以幫助其他人解決同樣的問題找到正確的答案 –

回答

3

Spring MVC已經爲您提供了HttpServletRequest對象,它有一個返回Cookie[]getCookies()方法,因此您可以對其進行迭代。否則

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

,你可以從servlet請求使用Spring org.springframework.web.util.WebUtils

WebUtils.getCookie(HttpServletRequest request, String cookieName) 

順便說得到它的:

+0

還有別的辦法嗎?我不想迭代cookie數組,因爲這是大數組。 – hamed

+0

即使你不用手迭代它,框架也會爲你做,因爲cookie存儲在一個字符串中。 – meskobalazs

41

最簡單的方法是在控制器與@CookieValue註釋使用它代碼粘貼到問題中可以稍微改進一點。除了使用#setHeader(),這是更優雅:

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

餅乾可是沒有方法,通過價值得到試試這個

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();     
}  
} 
5

您還可以使用org.springframework.web.util.WebUtils.getCookie(HttpServletRequest, String)

1
private String extractCookie(HttpServletRequest req) { 
      for (Cookie c : req.getCookies()) { 
       if (c.getName().equals("myCookie")) 
        return c.getValue(); 
       } 
      return null; 
     } 
3
private String getCookieValue(HttpServletRequest req, String cookieName) { 
    return Arrays.stream(req.getCookies()) 
      .filter(c -> c.getName().equals(cookieName)) 
      .findFirst() 
      .map(Cookie::getValue) 
      .orElse(null); 
}