无法测试使用Spring Boot开发的REST API
我试图测试用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
我错过了什么明显的?
谢谢
@RequestBody CsvUploadModel form
这需要一个HttpMessageConverter
来存在,它可以读取multipart/form-data
类型的请求有效载荷。 不幸的是,Spring目前不提供这样的转换器。 有一个FormHttpMessageConverter
,但它只能读取简单的表单数据( application/x-www-form-urlencoded
)。
为了让你的方法工作,你应该删除@RequestBody
注解并为这些文件添加一个参数:
upload(CsvUploadModel form, @RequestParameter(required=false) MultipartFile file)
绑定表单数据不需要@RequestBody
。 然后您必须手动设置文件:
form.setFile(file);
也许有一个支持读取multipart/form-data
的第三方转换器。 我也不使用也不知道任何。
尝试改造
<dependency>
<groupId>com.squareup.retrofit</groupId>
<artifactId>retrofit</artifactId>
<version>1.6.1</version>
</dependency>
。
import retrofit.http.Body;
import retrofit.http.POST;
public interface IRestController {
@POST("/api-name")
public Response api(@Body Request request);
}
。
import static org.junit.Assert.assertNotNull;
import org.junit.Test;
import retrofit.RestAdapter;
public class TestRestAPI {
private static final String SERVER = "http://localhost:8080";
private IRestController service = new RestAdapter.Builder()
.setEndpoint(SERVER).build()
.create(IRestController.class);
@Test
public void basicTest(){
Response response = service.api(new Request());
assertNotNull(response);
}
}
链接地址: http://www.djcxy.com/p/1333.html