最近在用SpringBoot+thymeleaf+mysql写一个上传头像的功能,但是选择头像上传之后浏览器跳转失败,并出现如下界面:
在idea里面有如下警告,说是字段错误,但是我检查我的字段名和类型都没错误,很是疑惑:
2023-08-28 15:49:15.543 WARN 27768 --- [nio-8989-exec-4] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors<EOL>Field error in object 'student' on field 'images': rejected value [org.springframework.web.multipart.commons.CommonsMultipartFile@16dd591b]; codes [typeMismatch.student.images,typeMismatch.images,typeMismatch.java.lang.String,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [student.images,images]; arguments []; default message [images]]; default message [Failed to convert property value of type 'org.springframework.web.multipart.commons.CommonsMultipartFile' to required type 'java.lang.String' for property 'images'; 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 'images': no matching editors or conversion strategy found]]
2023-08-28 15:50:01.294 WARN 27768 --- [nio-8989-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors<EOL>Field error in object 'student' on field 'images': rejected value [org.springframework.web.multipart.commons.CommonsMultipartFile@565ec8fe]; codes [typeMismatch.student.images,typeMismatch.images,typeMismatch.java.lang.String,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [student.images,images]; arguments []; default message [images]]; default message [Failed to convert property value of type 'org.springframework.web.multipart.commons.CommonsMultipartFile' to required type 'java.lang.String' for property 'images'; 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 'images': no matching editors or conversion strategy found]]
主要代码如下:
@PostMapping("/add")
public String addStudent(MultipartFile images,Student student) throws IOException {
// 指定上传文件的保存路径
String uploadPath = "D:\\develop\\images";
if (!images.isEmpty()) {
//生成唯一文件名
String filename = UUID.randomUUID().toString() + "." + StringUtils.getFilenameExtension(images.getOriginalFilename());
images.transferTo(new File(uploadPath, filename));
student.setImages(filename);
}
studentService.save(student);
return "redirect:/emp/findAll";
}
显示所有学生html页面:
<tr th:class="${stuStat.odd}?'row1':'row2'" th:each="stu,stuStat : ${students}">
<td>
<span th:text="${stu.id}"/>
</td>
<td>
<span th:text="${stu.name}"/>
</td>
<td>
<span th:text="${stu.age}"/>
</td>
<td>
<span th:text="${stu.score}"/>
</td>
<td>
<span th:text="${#dates.format(stu.birthday,'yyyy-MM-dd')}"/>
</td>
<td>
<span th:text="${stu.email}"/>
</td>
<img th:src="@{'/images/' + ${stu.images}}" width="100" height="100" alt="Images"> </td>
<td>
<a th:href="@{/emp/delete(id=${stu.id})}">delete stu</a> |
<a th:href="@{/emp/find(id=${stu.id})}">update stu </a>
</td>
</tr>
添加学生的表单页:
<form th:action="@{/emp/add}" method="post" enctype="multipart/form-data">
<table cellpadding="0" cellspacing="0" border="0"
class="form_table">
<tr>
<td valign="middle" align="right">
name:
</td>
<td valign="middle" align="left">
<input type="text" class="inputgri" name="name" />
</td>
</tr>
<tr>
<td valign="middle" align="right">
age:
</td>
<td valign="middle" align="left">
<input type="text" class="inputgri" name="age" />
</td>
</tr>
<tr>
<td valign="middle" align="right">
score:
</td>
<td valign="middle" align="left">
<input type="text" class="inputgri" name="score" />
</td>
</tr>
<tr>
<td valign="middle" align="right">
birthday:
</td>
<td valign="middle" align="left">
<input type="date" class="inputgri" name="birthday" />
</td>
</tr>
<tr>
<td valign="middle" align="right">
email:
</td>
<td valign="middle" align="left">
<input type="text" class="inputgri" name="email" />
</td>
</tr>
<tr>
<td valign="middle" align="right">
images:
</td>
<td valign="middle" align="left">
<input type="file" class="inputgri" name="images" />
</td>
</tr>
</table>
<p>
<input type="submit" class="button" value="Confirm" />
</p>
</form>
【相关推荐】
业务场景及实现思路:设置图片静态存储路径,通过多级动态联动下拉框实现图片显示及翻页查看。页面渲染前通过数据库选择查询动态获取下拉框参数,点击联动选择后将结果通过url传递至后端。后端Controller通过HttpServletRequest获取页面url路径中的选择结果,利用File的listFiles()和.size()方法获取文件下图片集合和图片数量,进而通过Model的addAttribute返回前端渲染,实现筛选后读取并显示图片。