使用PrintWriter

时间:2019-02-04 15:21:01

标签: java spring spring-mvc

我正在此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 ,但似乎没有任何解决方法。

编辑:

这是堆栈跟踪: enter image description here

1 个答案:

答案 0 :(得分:1)

基本知识是:

  1. 标题必须先写;
  2. 然后必须使用getOutputStreamgetWriter来编写内容。

还有什么可能出问题:

  • 基本错误,例如同时使用response.getOutputStream()response.getWriter()-在这里不太可能。

  • 控制流:

    if (...) {
        ... redirect
        // Missing return
    }
    ... normal output
    
  • 过滤器或拦截器:通常不太可能;虽然这里是注释。

    out.flush(); // OKAY
    // Probably NOT OKAY: out.close();
    
  • 正在使用
  • Servlet 字段。服务方法本身应该是无状态的。