파일 업로드 시 파일을 첨부 했다면 문제가 발생하지 않는다. 첨부 하지 않고 빈값으로 Form Submit 을 하는 경우 예외 상황이 발생 한다.
Model 에 선언되어 있는 타입은 MultipartFile 로 되어 있지만, 빈 문자열 String 으로 인식 되어 값을 넣을 수 없어 Client 에는 400 Bad Request 가 응답이 되기도 한다.
해결 방법은 빈 문자열을 null 로 바꿔주는 것 이다. Spring 은 Model Binding 을 하기전에 @initBinder 로 선언 되어 있는 메소드가 있다면 우선으로 invoking 한다.
2014-10-24 11:48:19,803 TRACE HandlerMethod - Invoking [SampleController.initBinder] method with arguments [org.springframework.web.servlet.mvc.method.annotation.ExtendedServletRequestDataBinder@5552bb15]
이 시점에서 설명했던 작업을 한다. 사용하고 있는 Controller 에 아래 코드를 추가 하자.
@InitBinder
public void initBinder(WebDataBinder binder) throws Exception {
binder.registerCustomEditor(MultipartFile.class, new PropertyEditorSupport() {
@Override
public void setAsText(String text) {
logger.debug("initBinder MultipartFile.class: {}; set null;", text);
setValue(null);
}
});
}
String 으로 인식 되면 setAsText(String text) 로 전달 되는대 MultipartFile 은 객체 이기 때문에 null 값으로 setValue(Object value) 에 전달 한다.