spring mvc关于multipart的处理
一、介绍
服务器端开发提供文件上传功能的接口时,有时不仅仅只传一个文件,可能还伴有其他参数;例如路径参数,或者请求体参数,@RequesPart的注解有时间达不到预期的效果,其实是我们的使用方式不对。
二、使用@ModelAttribute
让我们考虑一个使用表单发送员工数据的简单用例,该数据由姓名和文件组成。
public class Employee {
private String name;
private MultipartFile document;
}
使用Thymeleaf创建一个表单
<form action="#" th:action="@{/employee}" th:object="${employee}" method="post" enctype="multipart/form-data">
<p>name: <input type="text" th:field="*{name}" /></p>
<p>document:<input type="file" th:field="*{document}" multiple="multiple"/>
<input type="submit" value="upload" />
<input type="reset" value="Reset" /></p>
</form>
服务端
@RequestMapping(path = "/employee", method = POST, consumes = { MediaType.MULTIPART_FORM_DATA_VALUE })
public String saveEmployee(@ModelAttribute Employee employee) {
employeeService.save(employee);
return "employee/success";
}
三、使用@RequestPart
@RequestMapping(path = "/requestpart/employee", method = POST, consumes = { MediaType.MULTIPART_FORM_DATA_VALUE })
public ResponseEntity<Object> saveEmployee(@RequestPart Employee employee, @RequestPart MultipartFile document) {
employee.setDocument(document);
employeeService.save(employee);
return ResponseEntity.ok().build();
}
四、使用@RequestParam
@RequestMapping(path = "/requestparam/employee", method = POST, consumes = { MediaType.MULTIPART_FORM_DATA_VALUE })
public ResponseEntity<Object> saveEmployee(@RequestParam String name, @RequestPart MultipartFile document) {
Employee employee = new Employee(name, document);
employeeService.save(employee);
return ResponseEntity.ok().build();
}