getoutputstream()

fykwrbwg  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(212)

我正在开发这个JavaSprint3.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,但似乎没有任何解决方法。
编辑:
下面是stacktrace:

piah890a

piah890a1#

基本要素包括:
头必须先写;
然后内容必须使用 getOutputStream 或者 getWriter .
仍然会出错的地方:
基本错误,如使用两者 response.getOutputStream() 以及 response.getWriter() -在这里不太可能。
控制流程:

if (...) {
    ... redirect
    // Missing return
}
... normal output

过滤器或拦截器:通常不太可能;尽管这里有注解。

out.flush(); // OKAY
// Probably NOT OKAY: out.close();

正在使用的servlet字段。服务方法本身应该是无状态的。

相关问题