White Life Story

Spring MVC Model 에 MultipartFile 을 사용하는 경우 Failed to convert property value of type 'java.lang.String' to required type 'org.springframework.web.multipart.MultipartFile[]' for property 'uploadFiles' 현상 해결 하기 본문

Develop/Spring

Spring MVC Model 에 MultipartFile 을 사용하는 경우 Failed to convert property value of type 'java.lang.String' to required type 'org.springframework.web.multipart.MultipartFile[]' for property 'uploadFiles' 현상 해결 하기

새내기 whitelife 2014.10.24 12:00

파일 업로드 시 파일을 첨부 했다면 문제가 발생하지 않는다. 첨부 하지 않고 빈값으로 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) 에 전달 한다.


3 Comments
댓글쓰기 폼