如何发布模型数据和文件?

时间:2018-06-10 05:03:35

标签: spring-mvc

我有一个这样的控制器:

@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()时,上传文件部分开始工作,我可以获取该文件。

已经阅读thisthis来设置数据绑定器。

@InitBinder
public void initBinder(WebDataBinder binder, WebRequest request) {
    binder.setDisallowedFields("user.profileImage");
    binder.setAllowedFields("profileImageFile");
}

但这没有任何改变。

1 个答案:

答案 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部分。我认为这只是将模型从控制器映射到页面,而不是将表单发送到接收器控制器。无论如何......它现在正在运作。我只需要在一个帖子中执行文件和模型(实体)。