LANGUAGE/!$%!% ERROR NOTE 2019. 11. 20. 11:09

SpringBoot

1. Error - 에러

Servlet.service() for servlet [dispatcherServlet] in context with path [/jelly] threw exception [Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadException: Stream closed] with root cause
java.io.IOException: Stream closed

 

2. Ploblem - 문제

MockTest를 통해서 MockMultipartFile로 파일을 보내봤을때는 잘 보내졌는데..

Spring 가동중에 Multipart로 파일을 업로드해보면 Stream closed라는 Error가 발생했다.

많은 경우들을 참조해봤지만 나의 경우가 아니였다.

나의 경우에는 개발상 편의를 위해서 Filter에서 Request 호출시에 사용하는 값들(RequestBody)을 Highlight시켜서 Log를 찍어주도록 하기위해 다음 메소드를 사용하는데

servletRequest.getReader()

그런데 이 메소드를 Spring이 사용하기 전에 Filter에서 먼저 사용할 경우 Spring이 호출시 값들을 사용하지 못한다.

때문에 MultiReadRequestWrapper(https://stackoverflow.com/a/57291383)를사용하여 방지하였다.

그런데 MultiReadRequestWrapper가 MultipartRequest의 경우는 방지 하지 못하였다.

3. Solved - 해결

웬만하면 없을 경우라고는 보이지만.. 적어본다.

시간상 Multipart도 되도록 하지는 못 하였고, Multipart Request를 인지하여 넘어가도록 하였다.

boolean isMultipart = ServletFileUpload.isMultipartContent(servletRequest)
if (!isMultipart){
    servletRequest.getReader()
}

4. REF - 참조