gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:18:23 25 4
gpt4 key购买 nike

我正在开发这个 Java Sprint 3.0 应用程序,我将数据传递到数据表。一切工作正常,但我经常看到这个错误:

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. 必须首先写入 header ;
  2. 那么必须使用 getOutputStreamgetWriter 写入内容。

仍然可能出错的地方:

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

  • 控制流程:

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

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

关于java - 使用 PrintWriter 时已为此响应调用 getOutputStream(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54519224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com