使用MockMvc测试Drone接口遇ContentType未设置错误的排查与解决
解决MockMvc测试POST接口时
AssertionError: ContentType not set问题 问题场景
使用JUnit、MockMvc、SpyBean和Captor测试一个保存Drone对象的POST接口:
- 接口通过
@PostMapping配置了consumes = MediaType.APPLICATION_JSON_VALUE和produces = MediaType.APPLICATION_JSON_VALUE - 测试时抛出断言错误:
java.lang.AssertionError: ContentType not set
排查原因
看似是ContentType未正确设置,但实际是请求未通过应用的安全校验,接口返回了Unauthorized(401)响应——这类响应通常不会携带Content-Type: application/json头,导致MockMvc的断言逻辑报错。
解决方案
在测试方法上添加@WithMockUser(username = "foo")注解,模拟一个已认证的用户身份,让请求通过安全校验:
@Test @WithMockUser(username = "foo") void testSaveDrone() throws Exception { // 测试逻辑代码 }
添加后请求会正常进入接口处理流程,返回符合配置的JSON响应,ContentType not set的错误即可解决。
内容的提问来源于stack exchange,提问作者Jossany Moura
相关产品推荐
相关产品推荐

