Printemps: getOutputStream() a déjà été appelée pour cette réponse
Je sais qu'il y a bien d'autres postes de traiter avec la même erreur, mais elles sont toutes soit sur JSP /pages SPG ou pour toute autre raison n'est pas très utile dans mon cas. Je suis à l'aide de Spring MVC avec Thymeleaf. La fonction suivante est de téléchargement d'un fichier.
@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";
}
Il en fait de travail, de sorte qu'il n'est pas trop un problème, mais dans la console, je suis toujours le message d'erreur suivant:
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)
[...]
Autant que je le vois, getOutputStream()
n'est appelée qu'une seule fois. Aussi, la fonction entière est entourée par un try-catch
-bloc. Donc je voudrais savoir d'où vient cette erreur vient?
f = test.getFile()
Qu'est-ce quetest
?
Vous devez vous connecter pour publier un commentaire.
Si vous le retour de "test", vous configurez votre contrôleur de vous envoyer à certains point de vue... après l'utilisation de la réponse outputStream de retour d'un fichier binaire. Voici une idée de la façon de gérer cela:
Le téléchargement d'un fichier à partir du printemps contrôleurs
Je viens de rencontré ce problème.
Le problème a été causé par ma méthode de contrôleur de tenter le type de retour de Chaîne de caractères (nom de la vue) lorsqu'il la quitte. Lorsque la méthode de sortie, un second flux de réponse serait mis en place.
La modification de la méthode de contrôleur le type de retour de vide le problème est résolu.
J'espère que cette aide si quelqu'un d'autre rencontre ce problème.
Si vous voulez envoyer
String
ensuite, vous pouvez changerà