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

时间:2016-07-02 05:01:11

标签: java spring spring-mvc spring-boot multipart

我正在开发一个spring mvc应用程序,我想在我的控制器中处理多部分请求。在请求中我也传递了MultiPartFile,目前我正在使用@RequestParam来获取文件参数,方法看起来像,

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

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

2 个答案:

答案 0 :(得分:10)

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

  

@RequestParam注释也可用于关联a的一部分   "多部分/格式数据"请求带有支持的方法参数   相同的方法参数类型。主要区别在于   method参数不是String,@ RequestParam依赖于type   通过注册的Converter或PropertyEditor进行转换   @RequestPart依赖于HttpMessageConverters考虑   '内容类型'请求部分的标题。 @RequestParam很可能   在@RequestPart可能的情况下与名称 - 值表单字段一起使用   与包含更复杂内容的部分(例如JSON,XML)一起使用。

请参阅http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestPart.html

答案 1 :(得分:1)

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

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

  

主要区别在于当method参数不是String时,@RequestParam依赖于通过已注册的Converter转换类型或PropertyEditor@RequestPart依赖于HttpMessageConverters考虑到“内容类型”'请求部分的标题。 @RequestPara可能与名称 - 值表单字段一起使用,而@RequestPart可能与包含更复杂内容的部分(例如JSON,XML)一起使用。