2011-02-03 12 views

cevap

46

(flexible signatures of @RequestMapping annotated methods bakınız - 3.2.x için aynı bölüm, 4.0.x, 4.1.x, 4.3.x, 5.0.x), sen olabilir add the cookie doğrudan yanıta:

KOTLIN

@RequestMapping(["/example"]) 
fun exampleHandler(response: HttpServletResponse): ModelAndView { 
    response.addCookie(Cookie("COOKIENAME", "The cookie's value")) 
    return ModelAndView("viewname") 
} 

Java

@RequestMapping("/example") 
private ModelAndView exampleHandler(HttpServletResponse response) { 

     response.addCookie(new Cookie("COOKIENAME", "The cookie's value")); 

     return new ModelAndView("viewname"); 
} 
+0

Bazen 'cookie.setPath ("xxx") aramak gerekir; istek arasında çerez paylaşmak istiyorsanız'. –

10

ModelAndView'un bir parçası olarak değil, ancak denetleyici yönteminize iletilen HttpServletResponse nesnesine add the cookie directly nesnesini ekleyebilirsiniz. Eğer işleyicisi yöntemine parametre olarak tepkisini eklerseniz

5

Tüm Çerez örneklerini modelinizden alacak ve uygun çerez başlıklarını oluşturacak bir HandlerInterceptor yazabilirsiniz. Bu sayede kontrol cihazlarınızı HttpServletResponse'dan temizleyebilirsiniz. N NB. Interceptoru <mvc:interceptors> (XML config) veya WebMvcConfigurer.addInterceptors() (Java config) ile kaydetmeyi unutmayın. Java 8'de

+0

Bu özellikle, verileri Çerez, Üstbilgi, JSON vb. Olarak döndürüp döndürmeyeceğinizi ve endişelerin iyi bir şekilde ayrılmasını sağlamanızı istiyorsanız özellikle kullanışlıdır. – kuporific

+0

Bu gerçekten iyi örnek koddur. – mahesh

0

RustyX çözümü:

@Component 
    public class ModelCookieInterceptor extends HandlerInterceptorAdapter { 

     @Override 
     public void postHandle(HttpServletRequest req, HttpServletResponse res, Object handler, ModelAndView modelAndView) throws Exception{ 
      if (modelAndView != null) { 
       modelAndView.getModel().values().stream() 
        .filter(c -> c instanceof Cookie) 
        .map(c -> (Cookie) c) 
        .forEach(res::addCookie); 
      } 
     } 
    }