DTO에는 타입이 String으로 되어있다. 하지만 HTML form에는 input type="file"로 되어있다.
이때 브라우저가 보내는 데이터는 문자열(String)이 아니라 MultipartFile 객체로 들어온다.
그래서 DTO에 요청 데이터를 바인딩하려다 실패하였다.
오류가 발생한 이유는 실제 폼에서 들어온 타입은 MultipartFile이었으나, DTO의 해당 타입이 String이었기 때문이다.
| 실제 들어온 타입 | DTO에서 기대한 타입 |
| MultipartFile | String |
스프링은 MultipartFile → String 변환 방법을 알지 못한다.
그렇기 때문에 스프링은 String 필드에 넣을 수 없어서 에러를 내는 것이다.
해결 방법
DTO의 해당 필드 타입을 MultipartFile로 수정한다.
+ DB에 저장하기 위한 Entity에서는 파일 경로를 저장하기 위해 타입을 String으로 한다.
(* 파일 업로드를 하기 위해선 HTML form에 enctype="multipart/form-data" 가 반드시 필요하다.)