MultipartResolver BeanCreationException, multipartResolver 빈 생성 에러
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'multipartResolver' defined in class path resource [com/vam/configuration/WebConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.multipart.commons.CommonsMultipartResolver]: Factory method 'multipartResolver' threw exception; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/fileupload/disk/DiskFileItemFactory
MultipartReslover를 이용하여 이미지 업로드를 공부하던 중 이러한 에러를 겪게 되었다.
Gradle
implementation 'commons-io:commons-io:2.11.0' /* Apache commons-io */
Configuration
@Bean
public CommonsMultipartResolver multipartResolver() {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
multipartResolver.setDefaultEncoding("UTF-8"); // 파일 인코딩 설정
multipartResolver.setMaxUploadSizePerFile(5 * 1024 * 1024); // 파일당 업로드 크기 제한 (5MB)
return multipartResolver;
}
위의 상황에서 저러한 BeanCreationException을 겪게되어 매우 당황스러웠다
구글에 내가 참조한 블로그들의 글 또한 별반 다른게 없다고 생각했다.
그러던 중 한 블로그를 통해 해결하게 되었다.
https://rerewww.github.io/error/error-and-solution/
해결에 대한 답은
CommmnsMultipartResolver클래스는 CommonsFileUpload API를 이용하는데, CommonsFileUpload API를 찾을 수 없어서 발생하는 오류이다.
즉, build.gradle에 CommonsFileUpload API 를 주입해주면 되는 간단한 문제였다.
implementation group: 'commons-fileupload', name: 'commons-fileupload', version: '1.4' /* Apache Commons FileUpload */
위의 블로그분이 남겨준 의존성을 나타내주는 링크
https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload/1.4
Maven을 사용하더라도 위에 나와있으니 참고하면 좋을 것 같다.