【问题标题】:Spring MVC, Upload file with other fieldsSpring MVC,使用其他字段上传文件
【发布时间】:2015-06-04 21:08:57
【问题描述】:

我正在尝试构建使用其他表单字段上传文件的方法。

这是带有文件和其他一些字段的标准 Html 表单:

<form action="products" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="text" name="name">
    <input type="text" name="email">
    <input type="submit" value="Upload" name="submit">
</form>

请注意:我想使用标准的 HTML 表单,而不是 &lt;form:form ...&gt; 等 Spring 表单标签

这是我的控制器方法:

@ResponseBody
public MyDto createProduct(@RequestBody MyDto dto, @RequestParam MultipartFile file) {

}

但我收到错误消息:Required request body content is missing

我应该如何构造我的 web 方法来接收文件以及 DTO 对象作为参数?如果我可以将 MultipartFile 对象包含到 MyDto 中,那就太好了。

【问题讨论】:

    标签: spring spring-mvc file-upload


    【解决方案1】:

    您的问题发生是因为在绑定第一个参数的值时消耗了您的主体,通过省略 dto 的注释,框架将实例化并从请求值填充匹配的属性

      @ResponseBody
      public MyDto createProduct(MyDto dto, @RequestParam MultipartFile file) {
    
      }
    

    还请注意,您可以将 MultipartFile 类型的 file 属性添加到您的 MyDto 实例中,它也会正确实例化和绑定,所以只是

    @ResponseBody
    public MyDto createProduct(MyDto dto) {
    
    }
    

    【讨论】:

    • 在这种情况下我得到Required MyDto parameter 'dto' is not present
    • 我现在已经答对了,本来我的主要观点是不要用@RequestBody,但实际上不应该换成@RequestParam或者,省略注释 altogheter 会让你到达你想要的地方
    • 我正在使用 Postman REST 客户端和 JSON 数据进行测试,而不是与 JSON 请求映射,即 MyDto 中的所有字段都映射到 null
    • @Anand 在邮递员中删除标题“Content-Type: application/json”,它会正常工作
    • 什么时候需要注释,什么时候是可选的?他们的 Spring 文档似乎建议,如果要将传入请求绑定到 DTO,则始终需要将 @RequestBody 放在参数上。用@RequestBody注释或不注释参数MyDto dto有什么区别?
    猜你喜欢
    • 2018-12-01
    • 2017-08-21
    • 2014-05-19
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多