spring-mvc - 为什么我们不能从 java 中的 RequestBody 获取文件数据?

标签 spring-mvc file-upload

我正在尝试将文件上传到服务器,因此我尝试使用 @RequestBody 来获取文件的数据,但是在尝试上传文件时出现 415 错误代码。

所以我用谷歌搜索(得到了上传文件的解决方案)并且知道我无法从请求正文中获取文件数据。所以我想知道为什么我们不能从请求正文访问文件数据,因为数据将在 HTTP 请求的请求正文中发送,所以我想知道在上传文件的情况下请求是如何发生的。

我之前的服务器代码:

@RequestMapping(value = "/upload",headers = "Content-Type=multipart/form-data", method = RequestMethod.POST)
@ResponseBody
public String upload(@RequestBody MultipartFile file)
{
}

解决方案:
@RequestMapping(value = "/upload",headers = "Content-Type=multipart/form-data", method = RequestMethod.POST)
@ResponseBody
public String upload(MultipartHttpServletRequest request)
{
}

最佳答案

从技术上讲,您可以编写自己的 HttpMessageConverter 这将解析完整的多部分请求正文,但您必须有一个可以处理所有部分的非常具体的目标类型。

您会从 @RequestBody 的 javadoc 中注意到

Annotation indicating a method parameter should be bound to the body of the web request.



目的是将整个请求正文绑定(bind)到方法参数。如何将多部分请求的每个部分绑定(bind)到单个参数?类似于 MultiValueMap<String, Object> (which is what FormHttpMessageConverter uses when writing a multipart request)。但这不会很有用,因为您必须检查每个值的类型。

作为开发人员,准确指定您需要的内容更有意义。这就是为什么@RequestParam@RequestPart可用。

关于spring-mvc - 为什么我们不能从 java 中的 RequestBody 获取文件数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33041826/

相关文章:

java - Spring 和 MappingJackson2HttpMessageConverter 和 registerModule

file-upload - 使用 OS Open 将 Golang 文件上传到 s3

python - 从python上传到网站

php - 使用 Jquery 显示上传传输时间?

jquery - ASP.NET MVC 和 AjaxFileUpload

java - Spring mvc :resource not finding *. ico 文件

java - 使用 spring petclinic 示例和 hsqldb 的 jpa 查询语法

java - 从 Spring 访问 EJB 类

html - 通过 http 上传多个文件的最佳客户端浏览器库是什么?

java - 永远不会调用 Spring 拦截器