在spring mvc 3中,如何在返回ModelAndView时编写cookie?

Bob*_*obo 26 cookies spring-mvc spring-boot

我的控制器方法是返回a ModelAndView,但是还需要将cookie写回客户端.是否可以在Spring中完成?谢谢.

Wol*_*ram 50

如果将响应作为参数添加到处理程序方法中(请参阅@RequestMapping注释方法的灵活签名 - 3.2.x,4.0.x,4.1.x,4.3.x,5.0.x的相同部分),您可以将cookie添加到直接反应:

科特林

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

Java的

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

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

        return new ModelAndView("viewname");
}
Run Code Online (Sandbox Code Playgroud)


ska*_*man 10

不是ModelAndView,不是,但您可以将cookie直接添加HttpServletResponse传递给控制器​​方法的对象中.


rus*_*tyx 6

您可以编写一个HandlerInterceptor将从模型中获取所有Cookie实例并生成相应的cookie标头.这样您就可以保持控制器的清洁和畅通HttpServletResponse.

@Component
public class ModelCookieInterceptor extends HandlerInterceptorAdapter {

    @Override
    public void postHandle(HttpServletRequest req, HttpServletResponse res, Object handler, ModelAndView modelAndView) throws Exception {
        if (modelAndView != null) {
            for (Object value : modelAndView.getModel().values()) {
                if (value instanceof Cookie)
                    res.addCookie((Cookie) value);
            }
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

NB.不要忘记使用<mvc:interceptors>(XML配置)或WebMvcConfigurer.addInterceptors()(Java配置)注册拦截器.