我正在尝试测试使用Spring Boot创建的REST API . 以下是该方法的签名:
@RequestMapping(consumes = "multipart/form-data", method = RequestMethod.POST)
public Response<String> upload(@RequestBody CsvUploadModel form) {
以下是模型对象的详细信息:
private char separator;
private char quoteCharacter;
private String metricName;
private String groupName;
private MultipartFile file;
//getters and setters
我尝试使用1. chrome Postman和2.简单的http POST表单访问此服务 . 每次我收到错误时:415:不支持的媒体类型 .
编辑:以下是多部分bean的bean配置:
/**
* Allow file uploads
*
* @return
*/
@Bean
public MultipartConfigElement multipartConfigElement() {
MultiPartConfigFactory factory = new MultiPartConfigFactory();
factory.setMaxFileSize("500MB");
factory.setMaxRequestSize("500MB");
return factory.createMultipartConfig();
}
/**
* Get the multipart resolver
*
* @return
*/
@Bean
public MultipartResolver multipartResolver() {
return new CommonsMultipartResolver();
}
我尝试将@RequestBody更改为@RequestParam,但它无法正常工作 . 以下是邮递员的请求预览 .
POST /dev/wizard/upload HTTP/1.1
Host: localhost:10022
Cache-Control: no-cache
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="metricName"
test
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="separator"
,
----WebKitFormBoundaryE19zNvXGzXaLvS5C
我错过了什么明显的东西?
谢谢
2 回答
这需要
HttpMessageConverter
存在,可以读取multipart/form-data
类型的请求有效负载 . 不幸的是Spring目前还没有提供这样的转换器 . 有一个FormHttpMessageConverter
,但只能读取简单的表单数据(application/x-www-form-urlencoded
) .为了使您的方法有效,您应该删除
@RequestBody
注释并为文件添加参数:绑定表单数据不需要
@RequestBody
. 然后,您必须手动设置文件:也许有第三方转换器支持读取
multipart/form-data
. 我既不使用也不知道 .尝试改造
.
.