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")); } }
关键细节说明
@SpringBootTest:加载完整的Spring Boot应用上下文,涵盖所有自动配置(包括Spring Data REST的配置)、你的仓库Bean等,保证测试环境和生产环境的一致性。@AutoConfigureMockMvc:自动生成MockMvc实例,让你可以直接发送HTTP请求测试端点,省去手动配置的麻烦。- 必须移除
@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
相关产品推荐
相关产品推荐

