2017-09-13 116 views
0

我有一個REST控制器,它定義了一個接口,它採用一個可選的請求主體。415不支持的媒體類型,當不發送一個POST請求的可選請求主體

@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)應該做的伎倆。

我有以下測試,我想測試一個沒有任何請求正文的請求。

< 415不支持的媒體類型,含有UNKNOWN 實例1頁1,{內容類型= [:

@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此響應失敗應用/ JSON;字符集= UTF-8], 傳輸編碼= [分塊],日期= [星期三,2017年9月13日10時10分22秒GMT]}>

代碼執行甚至不進入在RestController內執行方法。

儘快爲測試提供一個空的Searchable,它貫穿始終。

是否執行@RequestBody(required = false)越野車,或者我在這裏做錯了什麼?

回答

0

您需要將設置爲"application/json"在您的請求中,同時從@Test發送文件。

相關問題