2015-10-14 11 views
16

Tôi đang làm việc trên một ứng dụng mvc mùa xuân java. Tôi đã thiết lập một cookie theo một trong các phương pháp điều khiển của tôi theo cách này:java - nhận giá trị cookie theo tên vào mùa xuân 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; 
} 

này đang làm việc tốt và tôi có thể nhìn thấy một cookie với tên test và giá trị "giá trị" trong giao diện điều khiển trình duyệt của tôi. Bây giờ tôi muốn lấy giá trị cookie theo tên trong phương thức khác. Làm thế nào tôi có thể nhận được giá trị của test cookie?

+0

Bạn nên chấp nhận một trong hai của meskobalazs hoặc câu trả lời ryanp của. – Frans

+0

Bạn thực sự nên chấp nhận một câu trả lời như @ Frans nói, nó giúp người khác với cùng một vấn đề tìm câu trả lời đúng –

Trả lời

3

Spring MVC đã cung cấp cho bạn đối tượng HttpServletRequest, nó có phương thức getCookies() trả về Cookie[] để bạn có thể lặp lại điều đó.

+0

Có cách nào khác không? Tôi không muốn lặp qua mảng cookie, vì đó là mảng lớn. – hamed

+0

Thậm chí nếu bạn không lặp lại nó bằng tay, khung công tác sẽ làm điều đó cho bạn, vì các cookie được lưu trữ trong một chuỗi. – meskobalazs

41

Cách đơn giản nhất là sử dụng nó trong một bộ điều khiển với @CookieValue chú thích:

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

Nếu không, bạn có thể lấy nó từ yêu cầu servlet sử dụng Spring org.springframework.web.util.WebUtils

WebUtils.getCookie(HttpServletRequest request, String cookieName) 

Bằng cách này, các mã được dán vào câu hỏi có thể được tinh chỉnh một chút. Thay vì sử dụng #setHeader(), đây là nhiều hơn nữa tao nhã:

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

Cookie doesnt có phương pháp để có được bằng giá trị thử này

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

Bạn cũng có thể sử dụng 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); 
} 
Các vấn đề liên quan