SpringBoot Swagger如何获取指定Controller/接口的swagger.json
基于你使用的springfox-boot-starter:3.0.0版本,两个需求都可以通过框架原生能力实现,不需要修改核心逻辑或引入额外依赖,具体实现方式如下:
1. 为不同调用系统生成对应Controller的独立swagger.json
实现核心是Springfox原生提供的Docket分组机制,每个分组对应独立的文档返回结果,配置后不同分组的api-docs接口只会返回筛选范围内的接口信息。
配置步骤:
- 先对不同服务对象的Controller做归类:可以按包路径拆分,比如面向系统A的Controller统一放在
com.yourapp.controller.systema包下,面向系统B的放在com.yourapp.controller.systemb包下;也可以自定义注解(比如@ApiForSystemA)标记对应Controller,两种方式都可以作为筛选条件。 - 在Swagger配置类中为每个系统创建独立的Docket实例,指定分组名和扫描规则,示例代码如下:
@Configuration public class SpringFoxConfig { // 系统A专属文档分组 @Bean public Docket systemADocket() { return new Docket(DocumentationType.OAS_30) .groupName("systemA") .select() // 按包路径筛选系统A的所有Controller .apis(RequestHandlerSelectors.basePackage("com.yourapp.controller.systema")) // 如果用注解标记,替换为下面的筛选规则即可 // .apis(RequestHandlerSelectors.withClassAnnotation(ApiForSystemA.class)) .paths(PathSelectors.any()) .build(); } // 系统B专属文档分组 @Bean public Docket systemBDocket() { return new Docket(DocumentationType.OAS_30) .groupName("systemB") .select() .apis(RequestHandlerSelectors.basePackage("com.yourapp.controller.systemb")) .paths(PathSelectors.any()) .build(); } }
配置完成后,不同系统可以通过指定group参数访问专属的swagger.json:
- 系统A访问地址:
/v3/api-docs?group=systemA,返回结果仅包含系统A对应Controller的所有接口 - 系统B访问地址:
/v3/api-docs?group=systemB,返回结果仅包含系统B对应Controller的所有接口
2. 生成单个接口端点对应的swagger.json
该能力同样原生支持,有两种常用实现方式:
- 临时筛选方式:不需要额外配置,直接在访问api-docs时追加
path参数指定目标接口路径即可,比如要获取系统A下路径为/api/a/order/create的单接口文档,直接访问/v3/api-docs?group=systemA&path=/api/a/order/create,返回结果就只包含该接口的描述信息。 - 固定端点方式:如果需要给单个接口生成固定的文档访问地址,可以额外创建一个Docket分组,在路径筛选规则中精确匹配目标接口,示例代码:
@Bean public Docket singleCreateOrderApi() { return new Docket(DocumentationType.OAS_30) .groupName("createOrderApi") .select() .apis(RequestHandlerSelectors.any()) // 精确匹配目标单接口路径 .paths(PathSelectors.ant("/api/a/order/create")) .build(); }
配置完成后直接访问/v3/api-docs?group=createOrderApi,即可拿到该单接口的固定swagger.json。
注意:以上路径基于Springfox 3.0.0默认配置,如果你在配置中修改了api-docs的基础路径,替换为实际使用的路径即可。
内容的提问来源于stack exchange,提问作者Mts
相关产品推荐
相关产品推荐

