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
相关产品推荐
相关产品推荐

