작업을 하던 중 해결하는데 시간이 걸려 적게 되었다.
1. 문제
기존 시스템 컨트롤러 - > 새 시스템 컨트롤러에 이관하는 작업을 진행했다.
화면상에 form태그(post)로 해당 컨트롤러에 값을 전달한다.
dateFrom, dateTo라는 두개의 값을 전달하는데 컨트롤러에 해당 dto에는 값이 매핑되지 않는 현상이 발생하였다.
기존 시스템에서는 dto에 값이 매핑이 됐고, 새 시스템에는 dto에 값이 매핑되지 않았다.
두 시스템은 같은 소스를 옮겨놓은 상태여서 소스는 동일했다.
2. 작업 과정
아래와 같이 문제들이 될만한 요소를 생각해 봤다.
<문제가 될 요소들>
1. 필터(Filter), 인터셉터(interceptor)에서 문제 발생
2. 설정(Config) 관련 문제
2.1. 필터(Filter), 인터셉터(interceptor)에서 문제 발생
디버거를 통해 다른 프로세스를 확인해봤지만, 동일했고 사용하고있는 Filter와 Interceptor소스에도 문제가 없었다.
이상한 점은 filter, Interceptor를 사용하는 부분에 HttpServletRequest에 값을 확인해봤는데 존재 하지 않았다.
2.2. 설정(Config) 관련 문제
AbstractAnnotationConfigDispatcherServletInitializer을 상속받은 클래스를 비교해봤다.
두 클래스에 설정에는 큰 차이가 없었고, 난항에 빠지게 되었다.
2.3. 이 외의 문제 (CommonsMultipartResolver)
form태그(POST) 방식으로 전달하지 않고, 아래와 같이 GET방식으로 주소를 입력해봤다.
http://127.0.0.1:8080/[관련 매핑 주소]?dateFrom=1111
-> 값이 정상적으로 매핑이 됐다.
그렇다면 POST방식(Multipart)에 문제가 있다는 생각이 들었다.
그래서 form태그에 enctype="multipart/form-data" 부분을 제거하고 처리해보니 정상적으로 값이 전달 됐다.
서로의 설정 차이를 비교해 본 결과
@Configuration
@EnableWebMvc
@ComponentScan
public class MvcServletConfig extends WebMvcConfigurationSupport {
...
@Bean
public CommonsMultipartResolver multipartResolver() {
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setDefaultEncoding("UTF-8");
return resolver;
}
}
CommonsMultipartResolver를 @Bean으로 구현을 해야 multipart를 사용할 수 있다.
3. 마무리
내가 설정을 잘 모르는 것이 문제지만, 회사에 Spring 버전이 낮아 처리가 쉽지 않은 것 같다.
문제를 추론하기보다는 다음에는 이런 기록들을 통해 빠른 시간안에 해결하는 것을 목표로 해야겠다.
참고 사항
Spring boot에서는 multipart를 기본 지원하는 것 같다.
<application.yml>
spring.servlet.multipart.enabled: 멀티파트 업로드 지원여부 (default: true)
spring.servlet.multipart.file-size-threshold: 파일이 메모리에 기록되는 임계값 (default: 0B)
spring.servlet.multipart.location: 업로드된 파일의 임시 저장 공간
spring.servlet.multipart.max-file-size: 파일의 최대 사이즈 (default: 1MB)
spring.servlet.multipart.max-request-size: 요청의 최대 사이즈 (default: 10MB)
spring:
servlet:
multipart:
file-size-threshold: 1MB
location: C:/Temp
max-file-size: 100MB
max-request-size: 100MB
참고 블로그: https://gofnrk.tistory.com/36
'백엔드 > Spring' 카테고리의 다른 글
[ Spring / 스프링 ] 프로퍼티(.properties) 읽는 방법 (0) | 2021.06.15 |
---|---|
[ Spring / 스프링 ] 컨테이너 빈 등록 정보 확인 (0) | 2021.06.14 |
[ Spring / 스프링 ] Annotation(어노테이션) 공부 - 4 [ Validation ] (0) | 2021.06.10 |
[ Spring / 스프링 ] Annotation(어노테이션) 공부 - 3 [ junit ] (0) | 2021.06.10 |
[ Spring / 스프링 ] Annotation(어노테이션) 공부 - 2 [ AOP ] (0) | 2021.06.10 |