我为 GET 方法创建了控制器测试。方法应返回 ResponseEntity<Boolean>
。这是我的休息控制器:
@GetMapping(path = "/{email}/", produces = MediaType.TEXT_PLAIN)
public ResponseEntity<Boolean> isEmailBlacklisted(@PathVariable("email") String email) {
Boolean emailBlacklisted = emailBlacklistService.isBlacklisted(email);
return new ResponseEntity<>(emailBlacklisted, HttpStatus.OK);
}
这是我的测试:
@Test
public void getEmailStatusSuccess() throws Exception {
String validEmail = "validEmail@test.com";
when(emailBlacklistService.isBlacklisted(any(String.class))).thenReturn(false);
mockMvc.perform(get("/email/blacklist/{email}/", validEmail)
.headers(HTTP_HEADERS))
.andExpect(status().isOk())
.andReturn();
verify(emailBlacklistService).isBlacklisted(any(String.class));
}
我期待 200 状态。我调试了它,看到 new ResponseEntity<>(emailBlacklisted, HttpStatus.OK);
是 `{ResponseEntity@4708} "<200 OK OK, false, []>"。但是,我收到了这个:
20:04:34.297 [main] DEBUG org.springframework.test.web.servlet.TestDispatcherServlet - Completed 500 INTERNAL_SERVER_ERROR
我花了几个小时来理解为什么它返回 500。对于其他组件,对象的响应完美地工作。我想知道这是否是 Boolean
类型的问题。任何帮助将不胜感激。
编辑:我发现将 MediaType.TEXT_PLAIN
更改为 MediaType.APPLICATION_JSON
可以解决此问题。我仍然不确定为什么以及如何保留 MediaType.TEXT_PLAIN
?