MockMvc发起GET请求返回404但URL合法,Spring Boot测试问题排查
问题原因
- 测试类配置错误:你在
@WebMvcTest注解中设置了useDefaultFilters = false,该配置会禁用Spring Web测试默认的组件扫描过滤器,导致即使你指定了要测试的控制器类,Spring也无法将其识别为控制器Bean完成注册,对应的请求映射路径自然不存在,返回404。 - 参数注解丢失:你在
BadgeControllerImpl重写getBadge方法时,statisticId参数上丢失了接口中定义的@PathVariable注解。Spring MVC默认不会继承接口方法参数的注解,缺少该注解会导致Spring无法将路径中的statisticId变量绑定到方法入参,造成请求匹配失败返回404。
解决办法
方案1(推荐)
直接移除@WebMvcTest注解中的useDefaultFilters = false配置即可,@WebMvcTest默认会自动识别你指定的控制器类,完成映射注册:
// 修改前 @WebMvcTest(useDefaultFilters = false, controllers = [BadgeControllerImpl::class]) // 修改后 @WebMvcTest(controllers = [BadgeControllerImpl::class])
方案2(补全参数注解)
在实现类的statisticId参数上补全@PathVariable注解:
override fun getBadge( @PathVariable @NotEmpty statisticId: String, // 其余参数保持不变 )
修改完成后重新运行测试即可正常匹配到请求路径,返回200状态码。
内容的提问来源于stack exchange,提问作者d1snin
相关产品推荐
相关产品推荐

