415不支持的媒体类型,当没有发送带有POST请求的可选请求正文时

时间:2017-09-13 10:25:10

标签: http-post spring-restcontroller spring-web

我有一个REST控制器,它定义了一个带有可选请求体的接口。

@RestController
@RequestMapping(ExampleRest.EXAMPLE_URI)
public class ExampleRest {
    public static final String EXAMPLE_URI = "/examples";

    @RequestMapping(value = "/search", method = POST)
    public Page<ExampleDto> search(@RequestBody(required = false) Searchable searchable, Pageable pageable) {
        return exampleService.findAll(searchable, pageable);
    }
}

Searchable对象包含用于创建JPASpecification的信息。它几乎是dto。我想让这个可搜索的选项。我知道@RequestBody(required = false)应该可以做到这一点。

我有以下测试,我想在没有任何请求主体的情况下测试请求。

@Test
public void post_NoCriteria_Ok() {
    RequestEntity requestEntity = new RequestEntity(HttpMethod.POST, URI.create(ExampleRest.EXAMPLE_URI + "/search"));
    ResponseEntity <RestResponsePage<ExampleDto>> response = restTemplate.exchange(requestEntity, new ParameterizedTypeReference <RestResponsePage<ExampleDto>> () {});
    Assert.assertEquals(HttpStatus.OK, response.getStatusCode());
}

如果我运行此测试,它会因RestController

的响应而失败
  

&lt; 415不支持的媒体类型,第1页,共1页,包含UNKNOWN   情况下,{内容类型= [应用/ JSON;字符集= UTF-8],   Transfer-Encoding = [chunked],Date = [Wed,13 Sep 2017 10:10:22 GMT]}&gt;

代码执行甚至没有在search内输入RestController方法实现。

一旦我为测试提供了一个空的Searchable,它就会一直运行。

@RequestBody(required = false)越野车的实施,或者我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

Content-Type文件发送时,您需要在请求中将"application/json"设置为@Test