无法测试使用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

上一篇: Unable to test the REST API developed with Spring Boot

下一篇: How do I write JSON data to a file?