You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot REST Docs中MockMvc授权测试出现Status 404问题

解决Spring Boot REST Docs MockMvc授权测试中的404错误

在使用Spring Boot REST Docs进行MockMvc授权测试时碰到404错误,结合你提供的SmsMessageController代码,我整理了几个核心排查点和解决思路:

  • 验证测试请求路径与控制器映射的一致性
    你的控制器标注了@RequestMapping("/luxsms/message"),这意味着所有该控制器的接口都需要以这个完整路径开头。如果测试代码中只写了/message或者拼写错误(比如把luxsms写成luxsm),必然会触发404。确保MockMvc请求使用完整路径,示例代码如下:

    mockMvc.perform(get("/luxsms/message")
            .with(httpBasic("username", "password")))
            .andExpect(status().isAccepted())
            .andDo(document("sms-message-endpoint"));
    
  • 确认测试上下文是否正确加载目标控制器
    测试类需要正确配置Spring MVC测试上下文,确保SmsMessageController被加载。如果使用@WebMvcTest,一定要指定目标控制器类;如果用@SpringBootTest,需要确保MockMvc被正确注入。另外,控制器依赖的SmsStatusService、SmsMessageService等Bean,需要用@MockBean在测试类中模拟,避免因依赖缺失导致控制器无法实例化:

    @ExtendWith({RestDocumentationExtension.class, SpringExtension.class})
    @WebMvcTest(SmsMessageController.class)
    class SmsMessageControllerTest {
        @Autowired
        private MockMvc mockMvc;
    
        @MockBean
        private SmsStatusService smsStatusService;
        @MockBean
        private SmsMessageService smsMessageService;
        @MockBean
        private TaskExecutor taskExecutor;
        @MockBean
        private ApplicationContext context;
    
        // 测试方法...
    }
    
  • 排查授权配置是否干扰路径匹配
    虽然404是资源未找到,但如果你的项目集成了Spring Security,需要确认授权规则没有拦截目标路径。比如,确保配置了允许访问/luxsms/message(或者要求认证但测试时已携带正确的授权信息)。如果授权规则错误地将该路径排除,也可能导致请求无法到达控制器。

  • 检查REST Docs请求构建器的使用
    如果你使用了RestDocumentationRequestBuilders来构建请求,要确保路径参数和控制器的映射完全一致,不要额外添加或遗漏前缀。这个构建器和普通的MockMvc请求构建器用法一致,但要注意不要因REST Docs的配置错误导致路径偏差。

另外,你提供的控制器构造函数代码不完整(Appl...),如果是ApplicationContext注入不完整,可能导致控制器无法正常初始化,但这种情况通常会触发启动异常而非404,所以优先级可以靠后排查。

内容的提问来源于stack exchange,提问作者victordeleco2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:37:27