programing

봄 MVC 3에서는 ModelAndView를 반환하면서 쿠키를 작성하는 방법은 무엇입니까?

newsource 2023. 2. 15. 22:05

봄 MVC 3에서는 ModelAndView를 반환하면서 쿠키를 작성하는 방법은 무엇입니까?

컨트롤러 메서드가 반환하는 것은ModelAndView단, cookie를 클라이언트에 회신해야 하는 요건도 있습니다.봄에 할 수 있을까요?감사해요.

핸들러 메서드에 응답을 파라미터로 추가하는 경우(3.2.x, 4.0.x, 4.1.x, 4.3.x, 5.x.x경우 주석 첨부 메서드의 유연한 시그니처 참조) cookie를 응답에 직접 추가할 수 있습니다.

코틀린

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

자바

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

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

        return new ModelAndView("viewname");
}

의 일부가 아닌ModelAndView, 아니요, 하지만 cookie를 직접 추가할 수 있습니다.HttpServletResponse컨트롤러 메서드에 전달되는 객체입니다.

를 쓸 수 있습니다.HandlerInterceptor모델에서 모든 쿠키 인스턴스를 가져와 적절한 쿠키 헤더를 생성합니다.이렇게 하면 컨트롤러의 청결을 유지할 수고를 덜 수 있습니다.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);
            }
        }
    }

}

NB. 요격기 등록도 잊지 말고<mvc:interceptors>(XML 설정) 또는WebMvcConfigurer.addInterceptors()(자바 설정).

Java 8의 LustyX 솔루션:

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

언급URL : https://stackoverflow.com/questions/4888456/in-spring-mvc-3-how-to-write-a-cookie-while-returning-a-modelandview