2015-10-14 17 views
16

Bir java yayı mvc uygulamasında çalışıyorum.java - bahar mvc adıyla çerez değerini al olsun

@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; 
} 

Bu iyi çalışıyor ve benim tarayıcı konsoluna isim test ve değer "değeri" ile bir çerez görebilirsiniz: Ben bu şekilde benim kontrolörün yöntemlerden birinde bir çerez belirledik. Şimdi diğer yöntemde çerez değerini isim ile almak istiyorum. test cookie değerini nasıl alabilirim?

+0

Sen meskobalazs 's veya ryanp cevabını ya kabul etmelidir. – Frans

+0

Gerçekten bir cevap gibi kabul etmelisiniz @Frans dedi, aynı problemleri olan başkalarının doğru cevapları bulmasına yardımcı olur –

cevap

3

Spring MVC zaten size HttpServletRequest nesnesini verir, Cookie[] döndüren bir getCookies() yöntemine sahiptir, böylece bunu yineleyebilirsiniz.

+0

Başka bir yolu var mı? Tanımlama bilgisi dizisi ile yineleme yapmak istemiyorum, çünkü bu büyük bir dizidir. – hamed

+0

Her ne kadar el ile yineleme yapmasanız da, çerçeve tek bir dizede saklandığından, çerçeve sizin için yine de yapacaktır. – meskobalazs

41

basit yolu @CookieValue ek açıklamanın bulunduğu bir kontrolöre kullanıyor:

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

Aksi takdirde, arada Bahar org.springframework.web.util.WebUtils

WebUtils.getCookie(HttpServletRequest request, String cookieName) 

kullanarak servlet isteğinden alabilirsiniz, soruya yapıştırılan kod biraz geliştirilebilir. Yerine #setHeader() kullanmak yerine, bu çok daha şık:

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

Kurabiye doesnt bu

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

Ayrıca org.springframework.web.util.WebUtils.getCookie(HttpServletRequest, String) kullanabilirsiniz deneyin değerine göre almak yöntemine sahip.

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