swagger整合gateway實現(xiàn)文檔集中化過程
更新時間:2026年02月06日 14:59:09 作者:哀愁
本文介紹了如何將Swagger與Spring?Cloud?Gateway整合,實現(xiàn)API文檔的集中化管理,通過Spring?Boot的自動裝配,配置了網(wǎng)關(guān)Swagger資源提供程序,實現(xiàn)了通過gateway路由的方式聚合Swagger文檔,整個過程包括了文件夾結(jié)構(gòu)、自動裝配文件內(nèi)容等詳細(xì)步驟
swagger整合gateway文檔集中化
swagger的公用配置
@ConfigurationProperties("my.swagger")
@Getter
@Setter
public class SwaggerProperties {
/**
* swagger2默認(rèn)的url后綴
*/
private String swagger2Url = "/v2/api-docs";
private String oas30Url = "/v3/api-docs";
private String swaggerVersion = "2.0";
/**
* 自動生成文檔的路由名稱,設(shè)置了generateRoutes之后,ignoreRoutes不生效
*/
private Set<String> generateRoutes = new HashSet<>();
/**
* 不自動生成文檔的路由名稱,設(shè)置了generateRoutes之后,本配置不生效
*/
private Set<String> ignoreRoutes = new HashSet<>();
/**
* 是否顯示該路由
*/
public boolean isShow(String route) {
int generateRoutesSize = generateRoutes.size();
int ignoreRoutesSize = ignoreRoutes.size();
if (generateRoutesSize > 0 && !generateRoutes.contains(route)) {
return false;
}
if (ignoreRoutesSize > 0 && ignoreRoutes.contains(route)) {
return false;
}
return true;
}
}
網(wǎng)關(guān) Swagger 資源提供程序gateway 路由的方式聚合swagger文檔
@EnableConfigurationProperties(SwaggerProperties.class)
@Primary
public class GatewaySwaggerResourceProvider implements SwaggerResourcesProvider {
@Resource
private SwaggerProperties swaggerProperties;
private final RouteLocator routeLocator;
private final GatewayProperties gatewayProperties;
@Autowired
public GatewaySwaggerResourceProvider(RouteLocator routeLocator, GatewayProperties gatewayProperties) {
this.routeLocator = routeLocator;
this.gatewayProperties = gatewayProperties;
}
/**
* 獲取所有的swagger資源配置
*
* @return
*/
@Override
public List<SwaggerResource> get() {
List<SwaggerResource> resources = new ArrayList<>();
Set<String> routes = new HashSet<>();
//取出Spring Cloud Gateway中的route
routeLocator.getRoutes().subscribe(route -> routes.add(route.getId()));
//結(jié)合application.yml中的路由配置,只獲取有效的route節(jié)點
gatewayProperties.getRoutes().stream().filter(
routeDefinition -> (
routes.contains(routeDefinition.getId()) && swaggerProperties.isShow(routeDefinition.getId())
)
).forEach(routeDefinition -> routeDefinition.getPredicates().stream()
.filter(predicateDefinition -> ("Path").equalsIgnoreCase(predicateDefinition.getName()))
.forEach(predicateDefinition -> resources.add(
swaggerResource(
routeDefinition.getId(),
predicateDefinition.getArgs().get(NameUtils.GENERATED_NAME_PREFIX + "0").replace("/**", swaggerProperties.getSwagger2Url())
)
)
)
);
return resources;
}
private SwaggerResource swaggerResource(String name, String location) {
SwaggerResource swaggerResource = new SwaggerResource();
swaggerResource.setName(name);
swaggerResource.setLocation(location);
swaggerResource.setSwaggerVersion(swaggerProperties.getSwaggerVersion());
return swaggerResource;
}
}
這里使用的SpringBoot的自動裝配
文件夾的結(jié)構(gòu)為

文件內(nèi)的內(nèi)容為
Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration= com.mn.swagger.SwaggerProperties, com.mn.swagger.GatewaySwaggerResourceProvider
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用SpringJPA?直接實現(xiàn)count(*)
這篇文章主要介紹了SpringJPA?直接實現(xiàn)count(*),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
Java按時間梯度實現(xiàn)異步回調(diào)接口的方法
這篇文章主要介紹了Java按時間梯度實現(xiàn)異步回調(diào)接口,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-08-08
MybatisPlus插件自動維護更新和創(chuàng)建時間方式
這篇文章主要介紹了MybatisPlus插件自動維護更新和創(chuàng)建時間方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-04-04
SpringBoot項目集成第三方CAS-client jar包的方法
本文介紹了SpringBoot中集成第三方CAS-clientjar包的兩種核心方式,涵蓋了從背景原理到實操步驟、依賴沖突解決、打包配置及常見問題排查的全面內(nèi)容,通過對比兩種集成方式,提出了選型建議,并強調(diào)了依賴管理的規(guī)范性,為實際項目開發(fā)提供了全面指導(dǎo),感興趣的朋友一起看看吧2025-12-12

