web-dev-qa-db-de.com

java - Bekommen Sie im Frühjahr mvc den Cookie-Wert nach Namen

Ich arbeite an einer Java-Frühling-MVC-Anwendung. Ich habe ein Cookie in einer der Methoden meines Controllers auf folgende Weise gesetzt:

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

Dies funktioniert einwandfrei und ich kann ein Cookie mit dem Namen test und dem Wert "value" in meiner Browser-Konsole sehen. Jetzt möchte ich den Cookie-Wert anhand des Namens in einer anderen Methode erhalten. Wie kann ich einen Wert für test-Cookie erhalten?

29
hamed

Der einfachste Weg ist die Verwendung in einer Steuerung mit der Annotation @CookieValue:

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

Andernfalls können Sie es mit Spring org.springframework.web.util.WebUtils aus der Servlet-Anforderung abrufen.

WebUtils.getCookie(HttpServletRequest request, String cookieName)

Der in die Frage eingefügte Code könnte übrigens etwas verfeinert werden. Anstelle von #setHeader() ist dies viel eleganter:

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

Sie können auch org.springframework.web.util.WebUtils.getCookie(HttpServletRequest, String) verwenden.

8
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);
}
4
ottercoder

Spring MVC gibt Ihnen bereits das HttpServletRequest-Objekt. Es verfügt über eine getCookies()-Methode, die Cookie[] zurückgibt, damit Sie das wiederholen können. 

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 hat keine Methode, um einen Wert zu erhalten

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