Frühjahr: getOutputStream() bereits aufgerufen wurde für diese Antwort
Ich weiß, dass es viele andere Beiträge den Umgang mit die gleiche Fehlermeldung, aber alle von Ihnen sind entweder über JSP /GSP-Seiten oder aus irgendeinem anderen Grund nicht sehr hilfreich in meinem Fall. Ich bin mit Spring MVC mit Thymeleaf. Die folgende Funktion ist für das herunterladen der Datei.
@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";
}
Es funktioniert tatsächlich, so dass es nicht zu viel von einem problem, aber in der Konsole, ich bin immer die folgende Fehlermeldung:
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)
[...]
Soweit ich sehe, getOutputStream()
wird nur einmal aufgerufen. Auch, die ganze Funktion ist umgeben mit einem try-catch
-block. Also ich würde gerne wissen, wo kommt dieser Fehler her?
f = test.getFile()
Was isttest
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie wieder 'test', weisen Sie Ihren controller senden Ihnen einige sehen... nach der Verwendung des response-Ausgabestrom, um wieder eine Binärdatei. Hier ist eine Idee, wie verwalten Sie diese:
Herunterladen einer Datei aus dem Frühjahr-Controller
Ich gerade erlebt dieses problem.
Das problem wurde verursacht von meinem controller-Methode versucht Rückgabetyp String (view name), wenn er sich beendet. Wenn die Methode verlassen, eine zweite Antwort stream eingeleitet werden würde.
Ändern der controller-Methode Rückgabetyp zu void das problem behoben.
Ich hoffe das hilft wenn noch jemand Erfahrungen mit diesem problem.
Wenn Sie möchten, senden
String
dann könnte man ändernzu