近期,使用filter拦截请求的方式,实现对登录状态的验证。不是登录状态的话,返回一个固定的json提示。功能实现后,每次拦截到非登录请求,都会报IllegalStateException: getWriter() has already been called for this response的异常提示。
代码如下,在writer = response.getWriter(); 一行报了这个错误。
private void returnJson(HttpServletResponse response, String json) throws Exception{
PrintWriter writer = null;
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
try {
writer = response.getWriter(); // 报错位置
writer.print(json);
} catch (IOException e) {
log.error("response error",e);
} finally {
if (writer != null)
writer.close();
}
}
网上查了很多文章,了解了这个报错的原因是,对同一个response对象,调用了两次及以上的getWriter() 方法。
但是这些文章给出的解决办法一般都是调完writer后,调用writer.flush(),来手动结束调