+-

我知道还有很多其他帖子处理同样的错误,但所有这些都是关于JSP / GSP页面或者在我的情况下对其他任何不太有用的原因.我正在使用 Spring MVC和Thymeleaf.以下功能用于下载文件.
@RequestMapping(value = "/test/download/*", method = RequestMethod.GET)
public String getFile(HttpServletResponse response)
{
ServletOutputStream stream = null;
try
{
stream = response.getOutputStream();
MultipartFile f = test.getFile();
InputStream is = f.getInputStream();
IOUtils.copy(is, stream);
response.flushBuffer();
stream.flush();
stream.close();
} catch(Exception ex)
{
}
return "test";
}
它确实有效,所以它不是一个问题,但在控制台中,我总是收到以下错误:
2014-01-10T09:28:09.053+0100 SEVERE Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: getOutputStream() has already been called for this response] with root cause
java.lang.IllegalStateException: getOutputStream() has already been called for this response
at org.apache.catalina.connector.Response.getWriter(Response.java:638)
at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:214)
at javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:105)
at javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:105)
at org.springframework.security.web.context.SaveContextOnUpdateOrErrorResponseWrapper.getWriter(SaveContextOnUpdateOrErrorResponseWrapper.java:125)
at org.thymeleaf.spring3.view.ThymeleafView.renderFragment(ThymeleafView.java:335)
at org.thymeleaf.spring3.view.ThymeleafView.render(ThymeleafView.java:190)
[...]
据我所知,getOutputStream()只被调用一次.此外,整个功能被try-catch-block包围.所以我想知道,这个错误来自哪里?
最佳答案
如果返回’test’,则在使用响应outputStream返回二进制文件后,指示控制器将您发送到某个视图.这是一个如何管理这个的想法:
Downloading a file from spring controllers
点击查看更多相关文章
转载注明原文:java – Spring:已经为此响应调用了getOutputStream() - 乐贴网