Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用PrintWriter时已为此响应调用getOutputStream()_Java_Spring_Spring Mvc - Fatal编程技术网

Java 使用PrintWriter时已为此响应调用getOutputStream()

Java 使用PrintWriter时已为此响应调用getOutputStream(),java,spring,spring-mvc,Java,Spring,Spring Mvc,我正在开发这个JavaSprint3.0应用程序,在这个应用程序中,我将数据传递到一个dataTable。一切正常,但我经常看到这样的错误: ERROR [[dispatcher]] Servlet.service() for servlet dispatcher threw exception java.lang.IllegalStateException: getOutputStream() has already been called 对于这一回应 这是我的密码: @PreAuthor

我正在开发这个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:

基础是:

  • 标题必须先写
  • 然后必须使用
    getOutputStream
    getWriter
    编写内容
  • 还有什么可能出错:

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

    • 控制流:

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

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


    你不在调试器中调用它们吗?@不,是的,我正在调试模式下运行。你有点误用了spring,这可能是罪魁祸首:如果发生意外情况,spring可能会预先填充
    HttpServletResponse
    。要解决您的问题,您的方法需要返回一个
    ResponseEntity
    ,如果您想自己可靠地编写输出,您还可以编写一个合适的spring视图,设置一个模型,并返回它应该返回的视图be@specialist我对spring非常陌生,所以我只是在遵循应用程序中已经完成的一个示例。你能不能给我举个例子,因为我真的不知道你在说什么。非常感谢。你能再加一些stacktrace吗。异常来自其他地方或您的功能。要考虑的一个场景是VIEW用户调用抛出异常,Spring正在尝试生成错误页面,但是响应流已经可以访问了,谢谢您的详细解答。我只尝试添加了.flush(),但问题仍然存在。还有其他建议吗?不知道,@Specializet e.a.指出了错误的“魔法”弹簧用法。spring的另一个例子可能会有所帮助。到目前为止,还没有任何效果,您还有其他例子吗?从另一个spring例子开始;尝试返回字符串,
    return(dataTableService.viewUsers(请求)问题是使用spring有很多不同的版本,我没有在构造附近使用servlet。不,stacktrace很有趣,因为我今天刚刚看到了它。显示了一个视图jsp,所以您的控制器方法应该只提供表的数据模型。我希望有人能够展示一个最佳实践示例。