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

Pra*_*lan 13 java spring spring-mvc multipart spring-boot

我正在开发一个spring mvc应用程序,我想在我的控制器中处理多部分请求.在请求我MultiPartFile 也通过,目前我正在使用@RequestParam文件paramaeter,方法看起来像,

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

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

Wil*_*son 12

这是无可厚非使用@RequestParamMultipart文件.

@RequestParam注释还可用于将"multipart/form-data"请求的一部分与支持相同方法参数类型的方法参数相关联.主要区别在于,当method参数不是String时,@ RequestParam依赖于通过已注册的Converter或PropertyEditor进行类型转换,而@RequestPart依赖于HttpMessageConverters,并考虑请求部分的"Content-Type"标头.@RequestParam可能与名称 - 值表单字段一起使用,而@RequestPart可能与包含更复杂内容的部分(例如JSON,XML)一起使用.

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


Cha*_*abh 7

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

春天文档指出它们之间的区别很清楚:

主要的区别是,当该方法参数不是字符串,@RequestParam依赖于经由注册转换的类型转换或PropertyEditor同时@RequestPart依赖于HttpMessageConverters考虑到请求部分的“内容类型”标头。@RequestPara可能与名称-值表单字段@RequestPart一起使用,而可能与包含更复杂内容的部分(例如 JSON、XML)一起使用。

  • 清澈如泥。我完全不知道使用注册转换器和使用 HttpMessageConverters 之间的实际区别是什么。 (10认同)