Spring Boot中如何配置Swagger按路径过滤服务(屏蔽/management接口)
解决SpringFox Swagger2排除/management路径接口的问题
针对你使用springfox-swagger2 2.6.1的场景,有两种简单有效的方法可以让/management路径的服务不出现在Swagger文档中:
方法一:通过路径过滤全局排除
创建Swagger配置类,在Docket实例中指定要包含(或排除)的路径,这样Swagger只会扫描符合条件的接口:
@Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() // 方案1:只扫描/api开头的所有接口,自动排除/management路径 .paths(PathSelectors.ant("/api/**")) // 方案2:用正则排除所有/management开头的路径(适合需要保留其他非/api路径的场景) // .paths(PathSelectors.regex("^(?!/management).*$")) .build() .apiInfo(buildApiInfo()); } private ApiInfo buildApiInfo() { return new ApiInfoBuilder() .title("核心API文档") .description("仅包含/api路径下的REST服务接口") .version("1.0.0") .build(); } }
两种路径选择方式的区别:
PathSelectors.ant("/api/**"):精准匹配所有以/api开头的接口,是最直接的方式,适合你的场景(只想保留/api下的服务)。- 正则表达式
^(?!/management).*$:是一个负向预查,意思是"所有不以/management开头的路径",如果你的应用还有其他非/api、非/management的路径需要保留,这个方式更合适。
方法二:用注解标记单个接口/Controller排除
如果需要更精细的控制(比如/management下部分接口需要保留,部分排除),可以在不需要生成文档的Controller或方法上添加@ApiIgnore注解:
// 整个Controller下的所有接口都排除出Swagger文档 @RestController @RequestMapping("/management") @ApiIgnore public class SystemManagementController { // 或者单独排除某个特定方法 @ApiIgnore @GetMapping("/metrics") public ResponseEntity<Map<String, Object>> getMetrics() { // 业务逻辑 return ResponseEntity.ok(Collections.emptyMap()); } }
这种方式的优势是灵活性高,适合零散的接口排除;如果/management下有大量Controller,还是方法一的全局路径过滤更高效。
配置完成后,重启应用,访问/v2/api-docs查看返回的JSON内容,就能确认/management路径的服务已经被排除了。
内容的提问来源于stack exchange,提问作者Halil
相关产品推荐
相关产品推荐

