淄博网站建设优化公司,东莞樟木头网站建设,分析一个网页设计,app开发制作价格表SpringCloudGateway集成SpringDoc 最近在搞Spring版本升级#xff0c;按客户要求升级Spring版本#xff0c;原来用着SpringBoot 2.2.X版本#xff0c;只需要升级SpringBoot 2.X最新版本也就可以满足客户Spring版本安全要求#xff0c;可是好像最新的SpringBoot 2.X貌似也不…SpringCloudGateway集成SpringDoc 最近在搞Spring版本升级按客户要求升级Spring版本原来用着SpringBoot 2.2.X版本只需要升级SpringBoot 2.X最新版本也就可以满足客户Spring版本安全要求可是好像最新的SpringBoot 2.X貌似也不支持Swagger2了综合考虑把项目的环境升级到SpringBoot3 版本
SpringBoot 3.1.2SpringCloud 2022.0.3 (SpringCloudGateway 4.0.6)SpringDoc-OpenAPI 2.2.0
引入SpringDoc-OpenAPI依赖
dependencygroupIdorg.springdoc/groupIdartifactIdspringdoc-openapi-starter-webflux-api/artifactIdversion2.2.0/version
/dependency
dependencygroupIdorg.springdoc/groupIdartifactIdspringdoc-openapi-starter-webflux-ui/artifactIdversion2.2.0/version
/dependency自动配置
思路
跟以前Swagger2集成Gateway差不多读取Gateway的路由配置信息刷新到SpringDoc-Swagger-UI属性去
实现
Configuration
ConditionalOnProperty(name SPRINGDOC_ENABLED, matchIfMissing true)
public class DocIntegrationConfig {Autowiredprivate SwaggerUiConfigProperties swaggerUiConfigProperties;Autowiredprivate RouteDefinitionLocator locator;PostConstructpublic void apis() {//获取所有的路径配置ListRouteDefinition definitions locator.getRouteDefinitions().collectList().block();//过滤只要lb模块式ListRouteDefinition serviceRoutes definitions.stream().filter(route - null ! route.getUri() route.getUri().getScheme().equals(lb)).collect(Collectors.toList());//按根据PredicateDefinition参数值和/** 确定是否路径匹配SetAbstractSwaggerUiConfigProperties.SwaggerUrl lbRouteUrl new HashSet();Optional.ofNullable(serviceRoutes).orElse(Collections.emptyList()).forEach(route - {AbstractSwaggerUiConfigProperties.SwaggerUrl swaggerUrl new AbstractSwaggerUiConfigProperties.SwaggerUrl();//获取路径前缀ListPredicateDefinition predicates route.getPredicates();if (null predicates || predicates.size() 0) {return;}String prefix ;for (PredicateDefinition predicate : predicates) {String predicateName predicate.getName();if (path.equalsIgnoreCase(predicateName)) {for (String regex : predicate.getArgs().values()) {if (regex.endsWith(/**)) {prefix regex.substring(0, regex.length() - 3);continue;}}}}//不是路径匹配的路由跳过if (StringUtils.isBlank(prefix)) {return;}swaggerUrl.setUrl(prefix Constants.DEFAULT_API_DOCS_URL);swaggerUrl.setName(prefix);swaggerUrl.setDisplayName(route.getId());lbRouteUrl.add(swaggerUrl);});//添加swaggerUI服务集成匹配if (lbRouteUrl.size() 0) {SetAbstractSwaggerUiConfigProperties.SwaggerUrl propertiesUrls swaggerUiConfigProperties.getUrls();if (null propertiesUrls || propertiesUrls.size() 0) {propertiesUrls lbRouteUrl;} else {propertiesUrls.addAll(lbRouteUrl);}swaggerUiConfigProperties.setUrls(propertiesUrls);}}
}然后就可以根据gateway的路由配置自动在gateway springdoc界面生成各服务项选择就可以查看该服务的在线文档。
借助swagger-ui.urls手动配置
springdoc也提供配置的形式集成配置swagger-ui.urls就可以了name为显示名称url为服务api-docs默认 /v3/api-docs。
springdoc:api-docs:#是否开启文档功能默认为true可不配置enabled: truewebjars:# 设置为空不要前缀prefix:swagger-ui:path: /doc.htmlurls:- name: 网关服务接口url: /v3/api-docs- name: 某某服务接口url: /xxxx/v3/api-docs在集成页面的右上角可看到配置的服务项选择具体的服务
集成后CORS问题请求查看下一篇文章