2015-10-14 73 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); 
}