我的Spring Boot应用程序中具有以下控制器,该控制器已连接到MongoDB
:
@RestController
@RequestMapping("/experts")
class ExpertController {
@Autowired
private ExpertRepository repository;
@RequestMapping(value = "/", method = RequestMethod.GET)
public List<Experts> getAllExperts() {
return repository.findAll();
}
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public Experts getExpertById(@PathVariable("id") ObjectId id) {
return repository.findBy_id(id);
}
我正在尝试在测试中测试get/id
端点,我希望它会返回如下所示的404响应:
@Test
public void getEmployeeReturn404() throws Exception {
ObjectId id = new ObjectId();
mockMvc.perform(MockMvcRequestBuilders.get("/experts/999", 42L)
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().isNotFound());
}
尽管如此,返回的响应是400,这意味着我的请求格式不正确。我猜问题出在我要在URI上输入的id上?我知道mongo接受hexStrings
作为主键,所以我的问题是,如何在我的数据库中不存在的URI上使用id,以便可以返回404响应?预先感谢您的回答。
答案 0 :(得分:0)
"/experts/999", 42L
这不是objectId。
尝试类似
mockMvc.perform(MockMvcRequestBuilders.get("/experts/58d1c36efb0cac4e15afd278")
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().isNotFound());
答案 1 :(得分:0)
对于urlVariables,您需要:
@Test
public void getEmployeeReturn404() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/experts/{id}", 42L)
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().isNotFound());
}
42L是您的 {id} PathVariable值。