我正在此Java Sprint 3.0应用程序上进行工作,在该应用程序中我正在将数据传递到dataTable。一切正常,但是我经常看到此错误:
ERROR [[dispatcher]] Servlet.service() for servlet dispatcher threw exception
java.lang.IllegalStateException: getOutputStream() has already been called
此响应。
这是我的代码:
@PreAuthorize("hasRole('ADMIN')")
@RequestMapping(value = "/dataTable", method = RequestMethod.GET)
public void serverSide(Model model, HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("application/json");
response.setHeader("Cache-Control", "no-store");
PrintWriter out = response.getWriter();
out.print(dataTableService.viewUsers(request));
}
我尝试添加以下内容:
out.flush();
out.close();
return;
我还尝试使用 response.getOutputStream()。print(dataTableService.viewUsers(request)) 和 response.getWriter()。 append(dataTableService.viewUsers(request)) ,而不是使用 PrintWriter ,但似乎没有任何解决方法。
编辑:
答案 0 :(得分:1)
基本知识是:
getOutputStream
或getWriter
来编写内容。还有什么可能出问题:
基本错误,例如同时使用response.getOutputStream()
和response.getWriter()
-在这里不太可能。
控制流:
if (...) {
... redirect
// Missing return
}
... normal output
过滤器或拦截器:通常不太可能;虽然这里是注释。
out.flush(); // OKAY
// Probably NOT OKAY: out.close();
Servlet 字段。服务方法本身应该是无状态的。