You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Spring Cloud网关中聚合多个Springwolf文档?

聚合Springwolf文档到Spring Cloud网关的实现方案

核心思路

Springwolf没有类似Swagger的SwaggerUiConfigParameters类,但可以通过其提供的SpringwolfUiProperties配置类,动态从网关路由中提取服务信息,批量添加各个微服务的Springwolf文档地址,实现聚合效果。

步骤与代码实现

  1. 前置准备

    • 所有微服务已集成Springwolf,且/springwolf/docs端点可通过网关正常访问
    • 网关项目已引入Springwolf UI依赖(若未添加,需在pom.xml或build.gradle中引入对应依赖)
  2. 编写网关配置类

@Configuration
public class SpringwolfAggregationConfig {

    @Bean
    public CommandLineRunner configureSpringwolfUi(
            RouteDefinitionLocator locator,
            SpringwolfUiProperties springwolfUiProperties) {
        return args -> {
            // 从网关路由中提取符合命名规则的服务名
            List<String> serviceNames = Objects.requireNonNull(locator.getRouteDefinitions().collectList().block())
                    .stream()
                    .map(RouteDefinition::getId)
                    .filter(id -> id.matches(".*-service"))
                    .map(id -> id.replace("-service", ""))
                    .toList();

            // 为每个服务构建Springwolf文档的网关访问地址
            List<SpringwolfUiProperties.BaseUrl> serviceDocsUrls = serviceNames.stream()
                    .map(serviceName -> {
                        SpringwolfUiProperties.BaseUrl baseUrl = new SpringwolfUiProperties.BaseUrl();
                        baseUrl.setName(serviceName);
                        // 根据你的网关路由规则调整URL,示例为/{serviceName}/springwolf/docs
                        baseUrl.setUrl("/" + serviceName + "/springwolf/docs");
                        return baseUrl;
                    })
                    .toList();

            // 将聚合地址设置到Springwolf UI配置中
            springwolfUiProperties.setBaseUrls(serviceDocsUrls);
        };
    }
}

注意事项

  • 路由规则适配:如果你的网关路由不是以服务名作为前缀,需要修改URL构建逻辑,确保指向对应服务的/springwolf/docs端点
  • 版本兼容:部分旧版本Springwolf的SpringwolfUiProperties中baseUrls的类型为List<Map<String, String>>,需调整代码为:
    List<Map<String, String>> serviceDocsUrls = serviceNames.stream()
            .map(serviceName -> {
                Map<String, String> urlMap = new HashMap<>();
                urlMap.put("name", serviceName);
                urlMap.put("url", "/" + serviceName + "/springwolf/docs");
                return urlMap;
            })
            .toList();
    springwolfUiProperties.setBaseUrls(serviceDocsUrls);
    
  • 跨域处理:若网关与微服务存在跨域问题,需在网关或微服务的Springwolf配置中开启跨域支持

内容的提问来源于stack exchange,提问作者Momchil Trenchev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 06:22:54