我有一个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)
越野车的实施,或者我在这里做错了什么?
答案 0 :(得分:0)
从Content-Type
文件发送时,您需要在请求中将"application/json"
设置为@Test
。