我有一个这样的控制器:
@RequestMapping(value = "/user/", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public UserLesserDTO createUser(@RequestParam("profileImageFile") MultipartFile file, @RequestBody UserDTO user, @PathVariable("method") String method) {
// Save profileImage as a profile image and store the image file name in user's profileImage attribute.
// save user.
}
我有一个HTML表单,其中所有用户的属性都为<input type="text" name="user attribute name">
加上一个<input type="file" name="profileImageFile">
我收到错误415,例如:The origin server is refusing to service the request because the payload is in a format not supported by this method on the target resource.
但是当我从@RequestBody UserDTO user
方法的签名中删除createUser()
时,上传文件部分开始工作,我可以获取该文件。
@InitBinder
public void initBinder(WebDataBinder binder, WebRequest request) {
binder.setDisallowedFields("user.profileImage");
binder.setAllowedFields("profileImageFile");
}
但这没有任何改变。
答案 0 :(得分:0)
我需要道歉。
首先,我不显示我的HTML表单。第二,因为我不告诉它是一个JSP页面。因为我需要做一些功课。
我必须使用form:form
(Spring表单)和modelAttribute="<THE_MODEL>"
创建我的表单,然后使用path="<ATTRIBUTE>"
将HTML表单字段映射到我在控制器级别的模型。
<form:form enctype="multipart/form-data" modelAttribute="userToEdit" />
<form:input name="username" path="username" />
</form:form>
控制器:
@RequestMapping(value = "/user/{method}", method = RequestMethod.POST)
public String home(@RequestParam("profileImageFile") MultipartFile file, @PathVariable("method") String method, @ModelAttribute("userEdt") User user) {
// Save image file
// Save user ...
}
我不确定modelAttribute
部分。我认为这只是将模型从控制器映射到页面,而不是将表单发送到接收器控制器。无论如何......它现在正在运作。我只需要在一个帖子中执行文件和模型(实体)。