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

SpringBootTest中MockMvc返回404而非200问题求助

MockMvc测试返回404的排查与解决

问题1:请求路径不匹配

测试用例中请求的路径是/api/user,但你的UserController上的@RequestMapping是/user,没有/api前缀。浏览器能正常访问说明实际接口路径是/user,测试里多了前缀导致404。

修复方式:
将测试中的请求路径改为/user:

mockMvc.perform(get("/user"))

问题2:重复构建MockMvc导致配置失效

你的测试类已经添加了@AutoConfigureMockMvc注解,Spring会自动注入配置完成的MockMvc实例,但你在setUp方法里又手动通过webAppContextSetup重新构建了MockMvc,这会覆盖掉原有的配置(包括@MockBean代理的UserRepository),导致请求无法正确路由到控制器。

修复方式:
删除setUp方法中的MockMvc构建代码,直接使用自动注入的实例:

@BeforeEach
public void setUp() {
    this.sampleUsers = Arrays.asList(
            new UserEntity(1, "Alice", "alice@example.com", "alicePassword"),
            new UserEntity(2, "Bob", "bob@example.com", "bobPassword")
    );
}

额外问题:JSON断言格式错误

JSON语法要求对象的键必须使用双引号,你当前断言用了单引号,会导致断言失败。

修复方式:
将断言中的单引号替换为双引号,注意Java字符串需要转义:

.andExpect(content().json("[{\"id\": 1, \"name\": \"Alice\", \"email\": \"alice@example.com\"}]"));

或者使用Java文本块(Java 15及以上版本)简化写法:

.andExpect(content().json("""
        [{"id": 1, "name": "Alice", "email": "alice@example.com"}]
        """));

其他验证点

确认你的UserController被Spring正确扫描到(比如和启动类在同一包或子包下),避免因为组件扫描问题导致控制器未注册。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 04:42:51