我正在使用@RestController POST端點測驗MockMvc。
在這個測驗中,MockHttpServletResponse的內容總是空的&;內容型別沒有被設定。
我檢查了控制器方法;它正在被呼叫并回傳正確的回應。
但在測驗中,狀態代碼被正確地設定為201。
這是測驗:
@Test
public void testBookCreation() throws Exception {
var response = mockMvc.perform(
MockMvcRequestBuilders
.post("/books/create")
.contentType(MediaType.APPLICATION_JSON)
.content(
jsonb. toJson(new Book("KR","K & R",5,8) )
)
).andExpect(
MockMvcResultMatchers.status().isCreated()
).andExpect(
MockMvcResultMatchers.content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)
).andExpect(
MockMvcResultMatchers.jsonPath("$.author").existence()
).andDo((result)->{
System.out.println(result.getResolvedException())。
System.out.println(result.getResponse())。
}).andReturn()。
}
這里是控制器方法:
@PostMapping("/create")
@ResponseStatus(code=HttpStatus.CREATED,reason="Book created")
public Book makeBook(@RequestBody Book b ) {
var res = bookRepository.save(b) 。
System.out.println(res)。
return res。
我認為問題出在測驗上而不是控制器本身。
uj5u.com熱心網友回復:
ResponseStatus的檔案說明如下:
警告:當在一個例外類上使用這個注解時,或者當設定這個注解的原因屬性時,將使用HttpServletResponse.sendError方法。
這意味著你將會收到以下形式的回應,不管你的控制器中發送的回應有效載荷是什么:
{
"timestamp":""。
"status":201,
"錯誤":"創建"。
"訊息":""。
"path":"/books/create"。
}
然后你應該洗掉reason欄位的ReponseStatus注釋:
@PostMapping("/create")
@ResponseStatus(code=HttpStatus.CREATED)
public Book makeBook(@RequestBody Book b ) {
var res = bookRepository.save(b) 。
System.out.println(res)。
return res。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/313460.html
標籤:
