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) {