我有这张表格
<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;
}
在我的模型中,我决定不将文件字段定义为multipartfile
,而是使用string
。
我这样做是为了让我能够抓取上传的文件文件名,并离开spring mvc上传文件。这是可行的,但当我引入错误检查时,我会得到以下错误:
org.springframework.validation.beanpropertybindingresult:1错误字段“file”上对象“customer”中的字段错误:拒绝值[org.springframework.web.multipart.support.standardmultipartttpservletrequest$standardmultipartfile@2a8400bb];代码[typeMismatch.customer.file,typeMismatch.file,typeMismatch.java.lang.String,typeMismatch];参数[org.springframework.context.support.defaultmessageSourceResolvable:代码[customer.file,file];参数[];default message[file]];默认消息[无法将类型[org.springframework.web.multipart.support.standardmultipartttpservletrequest$standardmultipartfile]的属性值转换为属性“file”的必需类型[java.lang.String];嵌套异常为java.lang.IllegalStateException:无法将类型[org.springframework.web.multipart.support.standardmultipartttpservletrequest$standardmultipartfile]的值转换为属性“file”的必需类型[java.lang.String]:找不到匹配
我的控制器:
@RequestMapping(value = "/saveCustomer", method = RequestMethod.POST)
public String saveCustomer(@Valid FileBucket fileBucket,
ModelMap model, @ModelAttribute("customer") Customer theCustomer,BindingResult result) throws IOException {
if (result.hasErrors()) {
System.out.println("validation errors");
return "customer-form";
} else {
System.out.println("Fetching file");
MultipartFile multipartFile = fileBucket.getFile();
// Now do something with file...
FileCopyUtils.copy(fileBucket.getFile().getBytes(), new File( UPLOAD_LOCATION + fileBucket.getFile().getOriginalFilename()));
String fileName = multipartFile.getOriginalFilename();
model.addAttribute("fileName", fileName);
theCustomer.setFile(fileName);
customerService.saveCustomer(theCustomer);
return "redirect:/customer/list";
}
}
我如何处理这个错误?
我创建了另一个名为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;
这招奏效了。
在您的错误部分只说这一点
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是客户前端its和文件输入,后端是字符串
,所以您有问题
Private String File
是不正确的参数,因为它是多部分数据,所以您应该在实体类中使用MultipartFile
@Entity
@Table(name="customer")
public class Customer {
... . . . . ..
private MultipartFile file;
//getters setters
}
我在研究“头先Java”中的多态性,并由此产生了这个概念。谁能举个例子解释一下吗? 编译器检查引用类型的类,而不是对象类型。 那么引用类型和对象类型之间有什么区别呢?
问题内容: 在Java中,序列化对象非常容易。在C 中 ,只要对象像C结构一样就安全(?)(无多态性)。在C 中, 如果编译器能够生成默认的(琐碎的)复制构造函数,那么为什么它不能生成用于自动序列化的代码? 在Java中,只能从ctor访问静态函数和数据成员。 在C ++中,我可以愉快地使用ctor中的非静态成员和函数。 在Java中,我可以在类中内联初始化数据成员。在C ++中,这是一个编译错误
我不习惯用口水和口水 我部署了一个服务于业务规则的tomcat服务器 问题是,如果我使用与服务器类型DRL或PKG相反的代码,我会得到两个不同的答案 如果我反对DRL类型的服务器,我会得到一个结果 http://localhost:8180/guvnor/org.drools.guvnor.Guvnor/package/PkgDinamicoBV/LATEST.drl 属性名称="type"val
这两者有什么区别?基元类型不能有“类”,可以吗?它是基元类型。没有对象具有类。 这两者有什么不同?
我有一个包含类型字段的实体类。这些值是我不允许修改的,但是当使用Spring数据时,我需要将它们映射到我的model类中,这样在将文档保存回Mongo后,这些值就不会丢失。因此从Mongo获取文档,映射到POJO,然后传递给Thymeleaf表单。当我尝试将Thymeleaf表单发送回控制器时,我收到了400个错误的请求“对象的验证失败...”错误,我知道这是因为这两个附加的字段。我如何将这些字段
我有来自API的响应文本。当我试图创建一个新的游戏从这个响应我得到一个错误: 错误:未处理的异常:“列表”类型不是“列表”类型的子类型 我在尝试使用JSON文本时遇到如下错误: 错误: 未处理的异常:“列表”类型不是“列表”类型的子类型 它指向游戏类中的这一行: 有什么建议吗?