对多部分文件使用@RequestParam是正确的方法吗?

我正在开发一个弹簧mvc应用程序,我想在我的控制器中处理多部分请求。在我传递的请求中,目前我正在使用以获取file参数,该方法如下所示,MultiPartFile@RequestParam

@RequestMapping(method = RequestMethod.POST)
public def save(
        @ModelAttribute @Valid Product product,
        @RequestParam(value = "image", required = false) MultipartFile file) {
    .....
}

上面的代码在我的服务中运行良好,文件正在服务器端获取。现在在某个地方我看到,如果该文件需要使用注释而不是.用于文件有什么问题吗?或者它可能会在将来导致任何类型的错误?@RequestPart@RequestParam@RequestParam


答案 1

与文件一起使用没有错。@RequestParamMultipart

@RequestParam注释还可用于将“多部分/表单数据”请求的部分与支持相同方法参数类型的方法参数相关联。主要区别在于,当方法参数不是字符串时,@RequestParam依赖于通过注册的转换器或属性编辑器进行类型转换,而@RequestPart依赖于HttpMessageConverters,同时考虑到请求部分的“内容类型”标头 @RequestPart @RequestParam。 XML)。

查看 http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestPart.html


答案 2

这两个注释都可以使用,但是,您可以根据它们在内部解释参数的方式对它们进行选择。

Spring Docs非常清楚地说明了它们之间的区别:

主要区别在于,当方法参数不是 String 时,依赖于通过注册转换器进行类型转换,或者依赖于考虑请求部分的“Content-Type”标头。 可能与名称-值表单字段一起使用,而可能与包含更复杂内容(例如 JSON、XML)的部分一起使用。@RequestParamPropertyEditor@RequestPartHttpMessageConverters@RequestPara@RequestPart


推荐