package com.panzhihua.zuul.config;
|
|
import io.swagger.annotations.ApiOperation;
|
import org.springframework.cloud.netflix.zuul.filters.Route;
|
import org.springframework.cloud.netflix.zuul.filters.RouteLocator;
|
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Primary;
|
import springfox.documentation.builders.PathSelectors;
|
import springfox.documentation.builders.RequestHandlerSelectors;
|
import springfox.documentation.spi.DocumentationType;
|
import springfox.documentation.spring.web.plugins.Docket;
|
import springfox.documentation.swagger.web.SwaggerResource;
|
import springfox.documentation.swagger.web.SwaggerResourcesProvider;
|
import springfox.documentation.swagger2.annotations.EnableSwagger2;
|
|
import java.util.*;
|
|
import static java.util.stream.Collectors.collectingAndThen;
|
import static java.util.stream.Collectors.toCollection;
|
|
/**
|
* @program: springcloud_k8s_panzhihuazhihuishequ
|
* @description: swagger
|
* @author: huang.hongfa weixin hhf9596 qq 959656820
|
* @create: 2020-11-26 16:57
|
**/
|
@Configuration
|
@EnableSwagger2
|
@Primary
|
public class SwaggerConfig implements SwaggerResourcesProvider {
|
|
//RouteLocator可以根据zuul配置的路由列表获取服务
|
private final RouteLocator routeLocator;
|
|
private String[]ids=new String[]{"appletsbackstage","applets","communitybackstage", "shopbackstage"};
|
|
public SwaggerConfig(RouteLocator routeLocator) {
|
this.routeLocator = routeLocator;
|
}
|
/**
|
* Gets a result.
|
*
|
* @return a result
|
*/
|
@Override
|
public List<SwaggerResource> get() {
|
List resources = new ArrayList();
|
List<Route> routes = routeLocator.getRoutes();
|
routes = routes.stream().collect(
|
collectingAndThen(
|
toCollection(() -> new TreeSet<>(Comparator.comparing(Route::getId))), ArrayList::new)
|
);
|
//通过RouteLocator获取路由配置,遍历获取所配置服务的接口文档,这样不需要手动添加,实现动态获取
|
List<String>stringList= Arrays.asList(ids);
|
for (Route route: routes) {
|
String id = route.getId();
|
boolean contains = stringList.contains(id);
|
String fullPath = route.getFullPath();
|
String s = fullPath.replaceFirst("/api", "");
|
String s1 = s.replaceFirst("/" + id, "");
|
if (contains) {
|
resources.add(swaggerResource(id,s1.replace("**", "v2/api-docs"),"1.0"));
|
}
|
}
|
return resources;
|
}
|
|
private SwaggerResource swaggerResource(String name, String location, String version) {
|
SwaggerResource swaggerResource = new SwaggerResource();
|
swaggerResource.setName(name);
|
swaggerResource.setLocation(location);
|
swaggerResource.setSwaggerVersion(version);
|
return swaggerResource;
|
}
|
|
|
}
|