swagger整合 gateway实现文档集中化

swagger的公用配置

@ConfigurationProperties("my.swagger")
@Getter
@Setter
public class SwaggerProperties {
    /**
     * swagger2默认的url后缀
     */
    private String swagger2Url = "/v2/api-docs";

    private String oas30Url = "/v3/api-docs";

    private String swaggerVersion = "2.0";


    /**
     * 自动生成文档的路由名称,设置了generateRoutes之后,ignoreRoutes不生效
     */
    private Set<String> generateRoutes = new HashSet<>();

    /**
     * 不自动生成文档的路由名称,设置了generateRoutes之后,本配置不生效
     */
    private Set<String> ignoreRoutes = new HashSet<>();

    /**
     * 是否显示该路由
     */
    public boolean isShow(String route) {
        int generateRoutesSize = generateRoutes.size();
        int ignoreRoutesSize = ignoreRoutes.size();

        if (generateRoutesSize > 0 && !generateRoutes.contains(route)) {
            return false;
        }

        if (ignoreRoutesSize > 0 && ignoreRoutes.contains(route)) {
            return false;
        }

        return true;
    }


}

网关 Swagger 资源提供程序
gateway 路由的方式聚合swagger文档

@EnableConfigurationProperties(SwaggerProperties.class)
@Primary
public class GatewaySwaggerResourceProvider implements SwaggerResourcesProvider {
    @Resource
    private SwaggerProperties swaggerProperties;
    private final RouteLocator routeLocator;
    private final GatewayProperties gatewayProperties;

    @Autowired
    public GatewaySwaggerResourceProvider(RouteLocator routeLocator, GatewayProperties gatewayProperties) {
        this.routeLocator = routeLocator;
        this.gatewayProperties = gatewayProperties;
    }

    /**
     * 获取所有的swagger资源配置
     *
     * @return
     */
    @Override
    public List<SwaggerResource> get() {
        List<SwaggerResource> resources = new ArrayList<>();
        Set<String> routes = new HashSet<>();
        //取出Spring Cloud Gateway中的route
        routeLocator.getRoutes().subscribe(route -> routes.add(route.getId()));
        //结合application.yml中的路由配置,只获取有效的route节点
        gatewayProperties.getRoutes().stream().filter(
                routeDefinition -> (
                        routes.contains(routeDefinition.getId()) && swaggerProperties.isShow(routeDefinition.getId())
                )
        ).forEach(routeDefinition -> routeDefinition.getPredicates().stream()
                .filter(predicateDefinition -> ("Path").equalsIgnoreCase(predicateDefinition.getName()))
                .forEach(predicateDefinition -> resources.add(
                        swaggerResource(
                                routeDefinition.getId(),
                                predicateDefinition.getArgs().get(NameUtils.GENERATED_NAME_PREFIX + "0").replace("/**", swaggerProperties.getSwagger2Url())
                        )
                        )
                )
        );
        return resources;


    }

    private SwaggerResource swaggerResource(String name, String location) {
        SwaggerResource swaggerResource = new SwaggerResource();
        swaggerResource.setName(name);
        swaggerResource.setLocation(location);
        swaggerResource.setSwaggerVersion(swaggerProperties.getSwaggerVersion());
        return swaggerResource;
    }
}

这里使用的SpringBoot的自动装配

文件夹的结构为
在这里插入图片描述
文件内的内容为

Auto Configure

org.springframework.boot.autoconfigure.EnableAutoConfiguration=
com.mn.swagger.SwaggerProperties,
com.mn.swagger.GatewaySwaggerResourceProvider

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值