为何Spring Boot中Swagger自动生成Employer完整CRUD接口?如何禁用?
问题描述
我创建了一个Spring Boot项目,定义了如下仅包含GET /employers端点的EmployerController:
@RestController public class EmployerController { @Autowired private EmployerService employerService; @GetMapping(path = "/employers") public List<Employer> getEmployers() { return (List<Employer>) employerService.getEmployers(); } }
同时实现了关联的EmployerService、EmployerRepository及Employer实体。添加Swagger/OpenAPI到类路径后,访问http://localhost:8080/swagger-ui.html时,发现Swagger UI中显示了Employer实体的完整CRUD(GET/POST/PUT/DELETE/PATCH)REST接口定义,但我仅编写了单个GET接口。请问该现象的原因是什么?是否可配置禁用这类自动生成的REST接口?
原因分析
出现该现象的核心原因是Spring Data REST的自动配置机制:
- 当项目中存在继承
Repository(或其子接口如JpaRepository)的EmployerRepository时,Spring Data REST会默认自动将该Repository暴露为一套完整的REST CRUD接口,默认路径为实体类名的复数形式(即/employers)。 - Swagger/OpenAPI的扫描逻辑会自动发现这些由Spring Data REST动态生成的接口,并将其展示在Swagger UI中,导致自定义的
GET /employers接口与自动生成的CRUD接口共存。
解决方案
针对该问题,有两种常见处理方式,可根据实际需求选择:
方式一:完全禁用Spring Data REST的自动接口生成
如果不需要Spring Data REST提供的自动CRUD接口,可直接关闭其自动配置:
- 通过配置文件关闭:
在application.properties中添加:
或在spring.data.rest.enabled=falseapplication.yml中添加:spring: data: rest: enabled: false - 通过启动类排除自动配置类:
@SpringBootApplication(exclude = {RepositoryRestMvcAutoConfiguration.class}) public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }
方式二:让Swagger忽略Spring Data REST生成的接口
如果需要保留Spring Data REST的接口但不想在Swagger中展示,可通过配置Swagger的扫描规则实现:
针对SpringDoc OpenAPI(Swagger 3)
- 仅扫描自定义Controller所在的包:
@Configuration @OpenAPIDefinition(info = @Info(title = "自定义API文档", version = "1.0")) @ComponentScan(basePackages = "com.yourproject.controller") // 替换为你的自定义Controller包路径 public class OpenApiConfig { }
针对Springfox Swagger 2
- 通过
Docket指定扫描范围:@Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.basePackage("com.yourproject.controller")) // 替换为你的自定义Controller包路径 .paths(PathSelectors.any()) .build(); } }
内容的提问来源于stack exchange,提问作者Alan Kavanagh
相关产品推荐
相关产品推荐

