无法将类型 [java.lang.String] 的值转换为 属性 所需的类型 [org.springframework.web.multipart.MultipartFile]
Cannot convert value of type [java.lang.String] to required type [org.springframework.web.multipart.MultipartFile] for property
我正在保存来自 jsp 的图像文件并在控制器中重命名它
问题是同一段代码在控制器的一部分工作,而在控制器的另一部分不工作
这里是 jsp 两种情况下相同的代码:-
<div class="form-group ">
<label for="photo">Photo:</label>
<form:input type="file" class="filestyle" path="studentPhoto"
id="studentPhoto" placeholder="Upload Photo"
required="required" />
</div>
这是按预期工作的控制器部分:-
@RequestMapping(value = "/student", params = "add", method = RequestMethod.POST)
public String postAddStudent(@ModelAttribute @Valid Student student,
BindingResult result, Model model) throws IOException {
if (result.hasErrors()) {
System.out.println(result.getAllErrors().toString());
model.addAttribute("examination_names", ExaminationName.values());
ArrayList<Role> roles = new ArrayList<Role>();
roles.add(Role.STUDENT);
model.addAttribute("roles", roles);
return "student/add";
} else {
System.out.println("Inside postAddStudent");
System.out.println(student);
student = studentService.save(student);
String PROFILE_UPLOAD_LOCATION = servletContext.getRealPath("/")
+ File.separator + "resources" + File.separator
+ "student_images" + File.separator;
BufferedImage photo = ImageIO.read(new ByteArrayInputStream(student
.getStudentPhoto().getBytes()));
File destination = new File(PROFILE_UPLOAD_LOCATION
+ student.getId() + "_photo" + ".jpg");
ImageIO.write(photo, "jpg", destination);
return "redirect:student?id=" + student.getId();
}
}
下面是控制器的一部分,它不工作并说错误:-
Failed to convert property value of type java.lang.String to required type org.springframework.web.multipart.MultipartFile for property studentPhoto; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [org.springframework.web.multipart.MultipartFile] for property studentPhoto: no matching editors or conversion strategy found
控制器代码
@RequestMapping(value = "/examForm", params = "edit", method = RequestMethod.POST)
public String postEditExamForm(@ModelAttribute @Valid Student student,
BindingResult result, Model model) throws IOException {
String PROFILE_UPLOAD_LOCATION = servletContext.getRealPath("/")
+ File.separator + "resources" + File.separator
+ "student_images" + File.separator;
if (result.hasErrors()) {
model.addAttribute("flags", Flag.values());
return "examForm/edit";
} else {
Student updatedStudent = studentService.findOne(student.getId());
updatedStudent.setDisqualifiedDescription(student
.getDisqualifiedDescription());
student = studentService.update(updatedStudent);
BufferedImage photo = ImageIO.read(new ByteArrayInputStream(student
.getStudentPhoto().getBytes()));
File destination = new File(PROFILE_UPLOAD_LOCATION
+ student.getId() + "_photo" + ".jpg");
ImageIO.write(photo, "jpg", destination);
return "redirect:examForm?id=" + updatedStudent.getId();
}
}
您的 <form:form...>
标签中缺少 enctype="multipart/form-data"
。
由于您的表单没有 enctype="multipart/form-data"
spring 将 <form:input type="file"..
视为 String
并在无法将 String
转换为 [= 时抛出错误16=] for studentPhoto
MultipartFile
in Student
class.
这是完整的 source code。
我正在保存来自 jsp 的图像文件并在控制器中重命名它
问题是同一段代码在控制器的一部分工作,而在控制器的另一部分不工作
这里是 jsp 两种情况下相同的代码:-
<div class="form-group ">
<label for="photo">Photo:</label>
<form:input type="file" class="filestyle" path="studentPhoto"
id="studentPhoto" placeholder="Upload Photo"
required="required" />
</div>
这是按预期工作的控制器部分:-
@RequestMapping(value = "/student", params = "add", method = RequestMethod.POST)
public String postAddStudent(@ModelAttribute @Valid Student student,
BindingResult result, Model model) throws IOException {
if (result.hasErrors()) {
System.out.println(result.getAllErrors().toString());
model.addAttribute("examination_names", ExaminationName.values());
ArrayList<Role> roles = new ArrayList<Role>();
roles.add(Role.STUDENT);
model.addAttribute("roles", roles);
return "student/add";
} else {
System.out.println("Inside postAddStudent");
System.out.println(student);
student = studentService.save(student);
String PROFILE_UPLOAD_LOCATION = servletContext.getRealPath("/")
+ File.separator + "resources" + File.separator
+ "student_images" + File.separator;
BufferedImage photo = ImageIO.read(new ByteArrayInputStream(student
.getStudentPhoto().getBytes()));
File destination = new File(PROFILE_UPLOAD_LOCATION
+ student.getId() + "_photo" + ".jpg");
ImageIO.write(photo, "jpg", destination);
return "redirect:student?id=" + student.getId();
}
}
下面是控制器的一部分,它不工作并说错误:-
Failed to convert property value of type java.lang.String to required type org.springframework.web.multipart.MultipartFile for property studentPhoto; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [org.springframework.web.multipart.MultipartFile] for property studentPhoto: no matching editors or conversion strategy found
控制器代码
@RequestMapping(value = "/examForm", params = "edit", method = RequestMethod.POST)
public String postEditExamForm(@ModelAttribute @Valid Student student,
BindingResult result, Model model) throws IOException {
String PROFILE_UPLOAD_LOCATION = servletContext.getRealPath("/")
+ File.separator + "resources" + File.separator
+ "student_images" + File.separator;
if (result.hasErrors()) {
model.addAttribute("flags", Flag.values());
return "examForm/edit";
} else {
Student updatedStudent = studentService.findOne(student.getId());
updatedStudent.setDisqualifiedDescription(student
.getDisqualifiedDescription());
student = studentService.update(updatedStudent);
BufferedImage photo = ImageIO.read(new ByteArrayInputStream(student
.getStudentPhoto().getBytes()));
File destination = new File(PROFILE_UPLOAD_LOCATION
+ student.getId() + "_photo" + ".jpg");
ImageIO.write(photo, "jpg", destination);
return "redirect:examForm?id=" + updatedStudent.getId();
}
}
您的 <form:form...>
标签中缺少 enctype="multipart/form-data"
。
由于您的表单没有 enctype="multipart/form-data"
spring 将 <form:input type="file"..
视为 String
并在无法将 String
转换为 [= 时抛出错误16=] for studentPhoto
MultipartFile
in Student
class.
这是完整的 source code。