MsgController.java ``` @RequestMapping(value = "/msg/createMsg", method = RequestMethod.POST) public String createMsg(@ModelAttribute MsgVO msgVO, HttpServletRequest request, @RequestParam MultipartFile file){ String fileUrl = FileHelper.upload("/uploads", file, request); msgVO.setMsgImage(fileUrl); msgMapper.createMsg(msgVO); return "redirect: " + URLHelper.baseUrl("/msg", request); } ``` newMsg.jsp ``` <div class="form-group form-group-lg"> <label class="control-label">Image</label> <input name="msgImage" type="file"> </div> ``` FileHelper와 URLHelper는 동일한 코드이기 때문에 제외 하였습니다. 저는 book 대신 msg로 표시했는데요.. 파일 업로드시 이런 에러가 나옵니다. org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors Field error in object 'msgVO' on field 'msgImage': rejected value [org.springframework.web.multipart.commons.CommonsMultipartFile@30b0363f]; codes [typeMismatch.msgVO.msgImage,typeMismatch.msgImage,typeMismatch.java.lang.String,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [msgVO.msgImage,msgImage]; arguments []; default message [msgImage]]; default message [Failed to convert property value of type 'org.springframework.web.multipart.commons.CommonsMultipartFile' to required type 'java.lang.String' for property 'msgImage'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [org.springframework.web.multipart.commons.CommonsMultipartFile] to required type [java.lang.String] for property 'msgImage': no matching editors or conversion strategy found] org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:111) MsgVO.java ``` private int msgIdx; private String msgWriter; private String msgTitle; private String msgContent; private String msgImage; ``` 메세지VO의 타입이 스트링이라 그런걸까요?.. 디비의 칼럼타입도 현재 mysql 을 사용하고 있는터라 VARCHAR로 설정 되어 있습니다..
# 타입 미스매치 에러 해당 에러는 File타입을 String으로 변환하려 하여 생긴 문제가 맞습니다. > Failed to convert property value of type ‘org.springframework.web.multipart.commons.CommonsMultipartFile’ to required type ‘java.lang.String’ for property ‘msgImage’; ## 문제 원인 msgVO 객체는 폼데이터를 기준으로 생성이 됩니다. ```java @RequestMapping(value = "/msg/createMsg", method = RequestMethod.POST) public String createMsg(@ModelAttribute MsgVO msgVO, HttpServletRequest request, @RequestParam MultipartFile file) { String fileUrl = FileHelper.upload("/uploads", file, request); msgVO.setMsgImage(fileUrl); msgMapper.createMsg(msgVO); return "redirect: " + URLHelper.baseUrl("/msg", request); } ``` 폼에서는 msgImage라는 이름의 파일타입을 전달하고있습니다. ```html <div class="form-group form-group-lg"> <label class="control-label">Image</label> <input name="msgImage" type="file"> </div> ``` 하지만 MsgVO 클래스에서는 msgImage필드가 문자열로 선언이 된듯 합니다. ```java private int msgIdx; private String msgWriter; private String msgTitle; private String msgContent; private String msgImage; ``` 이러한 이유로 타입이 맞지않아 에러가 발생하게 됩니다. ## 해결방법 **newMsg.jsp** 파일을 아래와 같이 변경시켜주세요. ```jsp <div class="form-group form-group-lg"> <label class="control-label">Image</label> <input name="msgImage" type="file"> </div> ``` to ```jsp <div class="form-group form-group-lg"> <label class="control-label">Image</label> <input name="file" type="file"> </div> ```
감사합니다. 해결 됐습니다~!