根据春季文件上传的标准方式:https://spring.io/guides/gs/uploading-files/ 我们将使用@RequestParam(“file”)MultipartFile文件来接收从表单上传的文件。
但我想知道为什么注释是“RequestParam”而不是像“RequestBody”这样的东西,因为在我们指定“method = post”的形式中,数据不应该在帖子体内吗?
非常感谢!
答案 0 :(得分:5)
要在春季获得MultipartFile
,我们可以使用@RequestPart
或@RequestParam
。这些注释用于关联multipart/form-data
请求的一部分。这是用spring docs编写的:
public @interface RequestPart
可用于关联a的一部分的注释 带有方法参数的“multipart / form-data”请求。支持的方法 参数类型包括MultipartFile和Spring的结合 MultipartResolver抽象,javax.servlet.http.Part结合在一起 Servlet 3.0多部分请求,或其他任何方法 参数,零件的内容通过一个 HttpMessageConverter考虑到'内容类型' 请求部分的标题。 这类似于@RequestBody 确实根据非多部分的内容解决参数 定期请求。
请注意,@ RequestParam注释也可用于关联 带有方法参数的“multipart / form-data”请求的一部分 支持相同的方法参数类型。
主要区别在于当method参数不是String时, @RequestParam依赖于通过已注册的Converter或类型转换 PropertyEditor,而@RequestPart依赖于HttpMessageConverters 考虑请求的“Content-Type”标题 部分。 @RequestParam可能与名称 - 值表单字段一起使用 而@RequestPart可能会与包含更多内容的部分一起使用 复杂内容(例如JSON,XML)。