POST:预期异常状态:<201> 但为:<200>
POST: Exception Status expected:<201> but was:<200>
从技术上讲这应该是一个简单的任务,但我找不到错误。
想写一个普通的“POST方法”,但是测试的时候遇到了问题:enter code here Status expected:<201> but what:<200>.
我的问题是,为什么我得到的是 OK 而不是 CREATED?
代码:
控制器中的后映射
@PostMapping
public Optional<ADto> createA(@RequestBody ADto a){
return Optional.ofNullable(a);
}
单元测试
@Test
void verifyPostA() throws Exception {
var a = new ADto(1L, "a");
var aText = objectMapper.writeValueAsString(a);
mockMvc.perform(
MockMvcRequestBuilders.post("/as")
.content(aText)
.contentType(MediaType.APPLICATION_JSON)
)
.andDo(print())
.andExpect(status().isCreated())
.andExpect(jsonPath("$.id").value("1"));
}
因为控制器方法执行成功但未执行 return ResponseEntity
,默认响应代码为 200。
要为这种情况配置响应代码,您只需在该控制器方法上注释 @ResponseStatus
即可:
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public Optional<ADto> createA(@RequestBody ADto a){
return Optional.ofNullable(a);
}
从技术上讲这应该是一个简单的任务,但我找不到错误。
想写一个普通的“POST方法”,但是测试的时候遇到了问题:enter code here Status expected:<201> but what:<200>.
我的问题是,为什么我得到的是 OK 而不是 CREATED?
代码:
控制器中的后映射
@PostMapping
public Optional<ADto> createA(@RequestBody ADto a){
return Optional.ofNullable(a);
}
单元测试
@Test
void verifyPostA() throws Exception {
var a = new ADto(1L, "a");
var aText = objectMapper.writeValueAsString(a);
mockMvc.perform(
MockMvcRequestBuilders.post("/as")
.content(aText)
.contentType(MediaType.APPLICATION_JSON)
)
.andDo(print())
.andExpect(status().isCreated())
.andExpect(jsonPath("$.id").value("1"));
}
因为控制器方法执行成功但未执行 return ResponseEntity
,默认响应代码为 200。
要为这种情况配置响应代码,您只需在该控制器方法上注释 @ResponseStatus
即可:
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public Optional<ADto> createA(@RequestBody ADto a){
return Optional.ofNullable(a);
}