package com.doumee.config.swagger; 
 | 
import lombok.AllArgsConstructor; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.springframework.cloud.gateway.config.GatewayProperties; 
 | 
import org.springframework.cloud.gateway.route.RouteLocator; 
 | 
import org.springframework.cloud.gateway.support.NameUtils; 
 | 
import org.springframework.context.annotation.Primary; 
 | 
import org.springframework.stereotype.Component; 
 | 
import springfox.documentation.swagger.web.SwaggerResource; 
 | 
import springfox.documentation.swagger.web.SwaggerResourcesProvider; 
 | 
  
 | 
import java.util.ArrayList; 
 | 
import java.util.List; 
 | 
  
 | 
@Slf4j 
 | 
@Component 
 | 
@Primary 
 | 
@AllArgsConstructor 
 | 
public class SwaggerResourceConfig implements SwaggerResourcesProvider { 
 | 
  
 | 
    private final RouteLocator routeLocator; 
 | 
    private final GatewayProperties gatewayProperties; 
 | 
  
 | 
  
 | 
    @Override 
 | 
    public List<SwaggerResource> get() { 
 | 
        List<SwaggerResource> resources = new ArrayList<>(); 
 | 
        resources.add(swaggerResource("网管服务接口",  "v2/api-docs?group=default")); 
 | 
        List<String> routes = new ArrayList<>(); 
 | 
        routeLocator.getRoutes().subscribe(route -> routes.add(route.getId())); 
 | 
        gatewayProperties.getRoutes().stream().filter(routeDefinition -> routes.contains(routeDefinition.getId())).forEach(route -> { 
 | 
            route.getPredicates().stream() 
 | 
                    .filter(predicateDefinition -> ("Path").equalsIgnoreCase(predicateDefinition.getName())) 
 | 
                    .forEach(predicateDefinition -> resources.add(swaggerResource(route.getId(), 
 | 
                            predicateDefinition.getArgs().get(NameUtils.GENERATED_NAME_PREFIX + "0") 
 | 
                                    .replace("**", "v2/api-docs?group=default")))); 
 | 
        }); 
 | 
        return resources; 
 | 
    } 
 | 
  
 | 
    private SwaggerResource swaggerResource(String name, String location) { 
 | 
        log.info("name:{},location:{}",name,location); 
 | 
        SwaggerResource swaggerResource = new SwaggerResource(); 
 | 
        swaggerResource.setName(name); 
 | 
        swaggerResource.setLocation(location); 
 | 
        swaggerResource.setSwaggerVersion("1.0.0"); 
 | 
        return swaggerResource; 
 | 
    } 
 | 
} 
 |