org.springframework.web.bind.MissingServletRequestParameterException: Required MultipartFile parameter 'file' is not present
아주 희안한 버그였다
//Servlet 2. x 에서 사용하는 설정
@Bean
public MultipartResolver multpartResolver() {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
multipartResolver.setMaxUploadSize(1024*1024*100L);
multipartResolver.setMaxInMemorySize(1024*1024*40L);
return multipartResolver;
}
스프링 MultipartFile 로 파일 받아오는 api를 짜고있는데
PostMan 으로 테스트 해보니 확장자 .mp3 파일은 성공적으로 받아지는데
그 이외의 확장자들은 전부 BadRequest
org.springframework.web.bind.MissingServletRequestParameterException: Required MultipartFile parameter 'file' is not present
이렇게 에러코드 400을 뱉는 것이였다.
(이게 원래는 전부 안되야 되는데 .mp3 확장자만 되는 것은 무엇????)
아 이거 Spring In Action 에서 봤던 내용이였는데
이걸 읽어놓고 까먹어서 구글링하고 있다
스프링 부트는 1.2.x 버젼 이상에서는 기본적으로 Servlet 3.x 을 사용한다
서블릿 3.x 이상 스펙에서는 multipartResolver를 외부 라이브러리 없이
쓸수있게 자체 구현되어있는데
스프링에서 Servlet 2.x 와 3.x 에서 다르게 구현체를 만들어놓았음
web.xml
에서 하거나- Servlet 등록하는 과정에서
MultipartConfigElement
을 선언하면서 설정 @MultipartConfig
라는 애노테이션 사용
출처: http://java.ihoney.pe.kr/351 [허니몬(Honeymon)의 자바guru]
//Servlet 3 이상 버젼에서의 설정
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setMaxFileSize(MAX_UPLOAD_FILE_SIZE);
factory.setMaxRequestSize(MAX_REQUEST_SIZE);
factory.setFileSizeThreshold(FILE_SIZE_THREADHOLD);
return factory.createMultipartConfig();
}
@Bean
public MultipartResolver multipartResolver() {
return new StandardServletMultipartResolver();
}
'Diary > Dev Diary' 카테고리의 다른 글
리눅스 service 등록 에러 (Failed to start service: Unit service not found) (0) | 2018.01.24 |
---|---|
JSONObject 와 Json(소문자)Object는 다른것 입니다 (0) | 2018.01.03 |
Swagger2 - ui 스프링 부트 405에러에 대한 삽질 (0) | 2017.09.07 |