[SPRING] Spring :이 응답에 대해 getOutputStream ()이 이미 호출되었습니다.
SPRINGSpring :이 응답에 대해 getOutputStream ()이 이미 호출되었습니다.
나는 다른 많은 게시물들이 매우 똑같은 오류를 다루고 있다는 것을 알고있다. 그러나 그것들 모두는 JSP / GSP 페이지에 관한 것이거나 다른 경우에는별로 도움이되지 않는다. Thymeleaf와 함께 Spring MVC를 사용하고 있습니다. 다음 기능은 파일을 다운로드하는 기능입니다.
@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 블록으로 둘러 쌓여 있습니다. 그래서 나는이 오류가 어디서 왔는지 알고 싶습니다.
해결법
-
==============================
1.'test'를 반환하면, outputStream을 사용하여 이진 파일을 반환 한 후 컨트롤러에 지시를 보냅니다. 어떻게 이것을 관리해야하는지에 대한 아이디어가 있습니다.
'test'를 반환하면, outputStream을 사용하여 이진 파일을 반환 한 후 컨트롤러에 지시를 보냅니다. 어떻게 이것을 관리해야하는지에 대한 아이디어가 있습니다.
스프링 컨트롤러에서 파일 다운로드
-
==============================
2.방금이 문제가 발생했습니다.
방금이 문제가 발생했습니다.
이 문제는 컨트롤러 메소드가 종료 될 때 String (뷰 이름)의 리턴 유형을 시도하여 발생합니다. 메소드가 종료되면 두 번째 응답 스트림이 시작됩니다.
컨트롤러 메소드 반환 유형을 void로 변경하면 문제가 해결되었습니다.
다른 사람들이이 문제를 경험하면 도움이되기를 바랍니다.
-
==============================
3.String을 보내기 원한다면 변경할 수 있습니다.
String을 보내기 원한다면 변경할 수 있습니다.
return "test";
에
return null;
from https://stackoverflow.com/questions/21039471/spring-getoutputstream-has-already-been-called-for-this-response by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 부트 자동 구성 순서 (0) | 2019.05.02 |
---|---|
[SPRING] Java 세션 객체가 재 할당 됨 (0) | 2019.05.02 |
[SPRING] Spring 보안 SAML을 사용하여 런타임에 IDP를 구성 할 수 있습니까? (0) | 2019.05.02 |
[SPRING] extjs의 계단식 콤보 박스 (0) | 2019.05.02 |
[SPRING] 10.XX.XX.28 : 6379의 Redis에 연결할 수 없습니다 : Unknown error - Spring Batch 또는 Windows 컴퓨터에서 액세스하는 중입니다. (0) | 2019.05.02 |