spring MVC 拦截器 返回报getWriter错

public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object arg2) throws Exception {
User user = (User) req.getSession().getAttribute("user");
resp.setContentType("application/json");
if(user != null){
return true;
}
PrintWriter out = resp.getWriter();
out.print(JSON.toJSONString("noLogin"));
out.flush();
out.close();
return false;
}

若是以上写法 ,则没有问题。

特别注意:1.当return true的时候 ,是不需要PrintWriter out = resp.getWriter(); 的,因为为true的时候,会继续流程,返回controller中的内容。

2.返回内容只能设置一次,即当拦截器中调用resp.getWriter时,则拦截器一定是返回false。

3.只有当 return false的时候,拦截器 拦截成功,中断流程,返回由拦截器返回,才写PrintWriter out = resp.getWriter();

 

例如 以下代码则是错误的:

public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object arg2) throws Exception {
User user = (User) req.getSession().getAttribute("user");
resp.setContentType("application/json");

PrintWriter out = resp.getWriter();//注意:此处调了getWriter,但是如果是返回true,则会报错;就算在if中加入out.flush();out.close();也同样会报错。

if(user != null){
return true;
}
out.print(JSON.toJSONString("noLogin"));
out.flush();
out.close();
return false;
}

posted @ 2018-01-29 13:36  坏笑的眼镜男  阅读(353)  评论(0)    收藏  举报