From 8c2cb9fa456704f20b8439f8d981e961de23cb9d Mon Sep 17 00:00:00 2001 From: lengleng Date: Thu, 10 Dec 2020 10:35:18 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20Introducing=20new=20features.=20#2?= =?UTF-8?q?119=20swagger=20=E6=9C=8D=E5=8A=A1=E5=88=97=E8=A1=A8=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E8=87=AA=E5=AE=9A=E4=B9=89=E6=8E=92=E5=BA=8F&=20?= =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E6=9C=8D=E5=8A=A1=E7=8A=B6=E6=80=81=E8=BF=87?= =?UTF-8?q?=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pigx-common/pigx-common-swagger/pom.xml | 7 ++++++- .../common/swagger/support/SwaggerProvider.java | 16 ++++++++++++---- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/pigx-common/pigx-common-swagger/pom.xml b/pigx-common/pigx-common-swagger/pom.xml index c928e6084..a44611ecb 100644 --- a/pigx-common/pigx-common-swagger/pom.xml +++ b/pigx-common/pigx-common-swagger/pom.xml @@ -73,5 +73,10 @@ spring-cloud-gateway-core provided - + + + org.springframework.cloud + spring-cloud-commons + + diff --git a/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/support/SwaggerProvider.java b/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/support/SwaggerProvider.java index cbf57cbc9..8e308b321 100644 --- a/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/support/SwaggerProvider.java +++ b/pigx-common/pigx-common-swagger/src/main/java/com/pig4cloud/pigx/common/swagger/support/SwaggerProvider.java @@ -19,6 +19,7 @@ package com.pig4cloud.pigx.common.swagger.support; import com.pig4cloud.pigx.common.swagger.config.SwaggerProperties; import lombok.RequiredArgsConstructor; +import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.cloud.gateway.route.RouteDefinition; import org.springframework.cloud.gateway.route.RouteDefinitionRepository; import org.springframework.cloud.gateway.support.NameUtils; @@ -46,19 +47,26 @@ public class SwaggerProvider implements SwaggerResourcesProvider { private final SwaggerProperties swaggerProperties; + private final DiscoveryClient discoveryClient; + @Override public List get() { List routes = new ArrayList<>(); - routeDefinitionRepository.getRouteDefinitions().subscribe(routes::add); + routeDefinitionRepository.getRouteDefinitions() + // swagger 显示服务名称根据 路由的order 字段进行升序排列 + .sort(Comparator.comparingInt(RouteDefinition::getOrder)).subscribe(routes::add); + return routes.stream() .flatMap(routeDefinition -> routeDefinition.getPredicates().stream() .filter(predicateDefinition -> "Path".equalsIgnoreCase(predicateDefinition.getName())) .filter(predicateDefinition -> !swaggerProperties.getIgnoreProviders() .contains(routeDefinition.getId())) .map(predicateDefinition -> swaggerResource(routeDefinition.getId(), - predicateDefinition.getArgs().get(NameUtils.GENERATED_NAME_PREFIX + "0").replace("/**", - API_URI)))) - .sorted(Comparator.comparing(SwaggerResource::getName)).collect(Collectors.toList()); + predicateDefinition.getArgs() + .get(NameUtils.GENERATED_NAME_PREFIX + "0").replace("/**", API_URI)))) + // 只显示注册中心 内已经正确启动的服务 + .filter(swaggerResource -> discoveryClient.getServices().stream().anyMatch(s -> s.equals(swaggerResource.getName()))) + .collect(Collectors.toList()); } private static SwaggerResource swaggerResource(String name, String location) {