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

Spring Data Rest测试求助:Spring Boot 2仓储REST接口测试遇404

解决Spring Data REST仓库的测试问题

你遇到的404问题核心是用错了测试注解!@WebMvcTest的定位是聚焦测试Spring MVC控制器(比如@RestController、@Controller),它不会加载Spring Data REST相关的自动配置和仓库Bean,自然找不到由@RepositoryRestResource自动生成的REST端点。

正确的测试方案

要测试Spring Data REST暴露的仓库端点,你需要用@SpringBootTest配合@AutoConfigureMockMvc,这样会加载完整的Spring应用上下文,包含Spring Data REST的所有配置和你的仓库Bean,和真实运行环境保持一致。

修改后的测试代码如下:

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc // 自动配置MockMvc,无需手动构建
public class RestTest extends AbstractRestTest {

    @Autowired
    private MockMvc mvc;

    @Test
    public void testData() throws Exception {
        mvc.perform(get("/api/v1/ehdata")
                .accept(MediaTypes.HAL_JSON_VALUE))
                .andDo(print())
                .andExpect(status().isOk())
                .andExpect(header().string(HttpHeaders.CONTENT_TYPE, 
                    MediaTypes.HAL_JSON_VALUE + ";charset=UTF-8"));
    }
}

关键细节说明

  1. @SpringBootTest:加载完整的Spring Boot应用上下文,涵盖所有自动配置(包括Spring Data REST的配置)、你的仓库Bean等,保证测试环境和生产环境的一致性。
  2. @AutoConfigureMockMvc:自动生成MockMvc实例,让你可以直接发送HTTP请求测试端点,省去手动配置的麻烦。
  3. 必须移除@WebMvcTest(EhDataRepository.class):这个注解完全不适合测试Spring Data REST生成的端点,它只会加载Web层相关的Bean,不会处理仓库自动暴露的REST接口。

额外提示

  • 如果你的应用配置了Spring Data REST的基础路径(比如spring.data.rest.base-path=/api/v1),那测试中的/api/v1/ehdata路径是正确的;如果没配置,默认基础路径是/api,路径需要改为/api/ehdata(不过你说浏览器访问正常,说明你的路径配置没问题)。
  • 确保spring-boot-starter-test依赖已正确引入,它包含了MockMvc和所有测试所需的类库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:00:36