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)容等詳細步驟
swagger整合gateway文檔集中化
swagger的公用配置
@ConfigurationProperties("my.swagger")
@Getter
@Setter
public class SwaggerProperties {
/**
* swagger2默認的url后綴
*/
private String swagger2Url = "/v2/api-docs";
private String oas30Url = "/v3/api-docs";
private String swaggerVersion = "2.0";
/**
* 自動生成文檔的路由名稱,設置了generateRoutes之后,ignoreRoutes不生效
*/
private Set<String> generateRoutes = new HashSet<>();
/**
* 不自動生成文檔的路由名稱,設置了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)文章
詳解spring boot starter redis配置文件
spring-boot-starter-Redis主要是通過配置RedisConnectionFactory中的相關(guān)參數(shù)去實現(xiàn)連接redis service。下面通過本文給大家介紹在spring boot的配置文件中redis的基本配置,需要的的朋友參考下2017-07-07
Springboot 2.x集成kafka 2.2.0的示例代碼
kafka近幾年更新非??欤部梢钥闯鰇afka在企業(yè)中是用的頻率越來越高。本文主要為大家介紹了Springboot 2.x集成kafka 2.2.0的示例代碼,需要的可以參考一下2022-04-04
Spring實現(xiàn)資源的動態(tài)加載和卸載的方法小結(jié)
這篇文章主要介紹了Spring實現(xiàn)資源的動態(tài)加載和卸載的方法小結(jié),文中通過代碼示例講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下2024-06-06

