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로 설정 되어 있습니다..
sehongpark님의 답변
# 타입 미스매치 에러
해당 에러는 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>
```
heavy_sun님의 답변
감사합니다. 해결 됐습니다~!