我有这个表格
Resource
和这个模型
<form:form action="saveCustomer" modelAttribute="customer" enctype="multipart/form-data" method="POST">
<!-- need to associate this data with customer id -->
<form:hidden path="id" />
<table>
<tbody>
<tr>
<td><label>First name:</label></td>
<td><form:input path="firstName" /></td>
</tr>
<tr>
<td><label>Last name:</label></td>
<td><form:input path="lastName" /></td>
</tr>
<tr>
<td><label>Email:</label></td>
<td><form:input path="email" /></td>
</tr>
<tr>
<td><label>Profile Image:</label></td>
<td>
<form:input type="file" path="file" id="file" class="form-control input-sm"/>
</td>
</tr>
<tr>
<td><label></label></td>
<td><input type="submit" value="Save" class="save" /></td>
</tr>
</tbody>
</table>
</form:form>
在我的模型中,我决定不将文件字段定义为@Entity
@Table(name="customer")
public class Customer {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private int id;
@Column(name="first_name")
private String firstName;
@Column(name="last_name")
private String lastName;
@Column(name="email")
private String email;
@NotEmpty
@Column(name="file")
private String file;
,而是使用字符串。
我这样做是为了让我只需抓取上传的文件名并留下spring mvc上传文件。这有效,但当我引入错误检查时,我收到此错误
org.springframework.validation.BeanPropertyBindingResult:1个错误 字段'file'上对象'customer'中的字段错误:被拒绝的值 [org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile@2a8400bb]; 代码 [typeMismatch.customer.file,typeMismatch.file,typeMismatch.java.lang.String,typeMismatch]; 参数 [org.springframework.context.support.DefaultMessageSourceResolvable: 代码[customer.file,file];参数[];默认消息[file]]; 默认消息[无法转换类型的属性值 [org.springframework.web.multipart.support.StandardMultipartHttpServletRequest $ StandardMultipartFile] 要求属性'file'的类型[java.lang.String];嵌套 异常是java.lang.IllegalStateException:无法转换值 类型 [org.springframework.web.multipart.support.StandardMultipartHttpServletRequest $ StandardMultipartFile] 要求属性'file'的类型[java.lang.String]:没有匹配 编辑或转换策略发现]
在我的控制器中我有这段代码
MultipartFile
我该如何处理这个错误?。
答案 0 :(得分:0)
在你的错误部分只说这个
typeMismatch.customer.file,typeMismatch.file,typeMismatch.java.lang.String,typeMismatch
但在实体类文件中是一个字符串
<form:form action="saveCustomer" modelAttribute="customer" enctype="multipart/form-data" method="POST">
以您的形式
<form:input type="file" path="file" id="file" class="form-control input-sm"/>
但是,在这里你的modelAttribute是客户前端的文件输入和后端它是String
以便你有问题
private String file
是不正确的参数,因为它是一个多部分数据,因此您应该在实体类中使用MultipartFile
@Entity
@Table(name="customer")
public class Customer {
... . . . . ..
private MultipartFile file;
//getters setters
}
答案 1 :(得分:0)
我创建了另一个名为path
的字段,并使file
瞬态
@Entity
@Table(name="customer")
public class Customer {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private int id;
@Column(name="first_name")
private String firstName;
@Column(name="last_name")
private String lastName;
@Column(name="email")
private String email;
@NotEmpty
@Column(name="path")
private String path;
@Transient
private MultipartFile file;
并且有效。