Denetleyici yöntemim bir ModelAndView
döndürüyor, ancak bir çerezi istemciye geri yazma gereği de var. İlkbaharda yapmak mümkün mü? Teşekkürler.İlkbaharda mvc 3, bir ModelAndView döndürürken bir tanımlama bilgisi nasıl yazılır?
cevap
(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");
}
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
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
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);
}
}
}
Bazen 'cookie.setPath ("xxx") aramak gerekir; istek arasında çerez paylaşmak istiyorsanız'. –