Swagger ui在zuul后面的时候在测试页面增加了一个/path

Posted

技术标签:

【中文标题】Swagger ui在zuul后面的时候在测试页面增加了一个/path【英文标题】:Swagger ui adds an additional /path in the testing page when behind zuul 【发布时间】:2018-10-22 19:20:09 【问题描述】:

我在一个嵌入zuul的spring boot应用程序背后有几个微服务,我们称之为“gateway”。

这是我的配置文件:

zuul:
  prefix: /api
  routes:
    api-login:
      path: /login/**
      url: http://localhost:8070/the-login/
    api-other:
        ...

我想在我的网关应用程序中显示我的每项服务的文档,因此我创建了以下内容:

@Component
@Primary
@EnableAutoConfiguration
public class SwaggerDocumentationController implements SwaggerResourcesProvider

@Override
public List<SwaggerResource> get() 
    List<SwaggerResource> resources = new ArrayList<SwaggerResource>();
    resources.add(swaggerResource("login-service", "/api/login/api-docs", "2.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;

 

它工作得非常好:每次用户访问 /gateway/api/login 时,它都会重定向到我的微服务,因此会重定向到 /the-login/。此外,当用户访问 /gateway/login/swagger-ui.html 时,他们可以看到文档。

问题在于,当用户从 swagger ui 文档页面尝试 api 时,他们会得到:


  "timestamp": "2018-05-12T15:35:38.840+0000",
  "status": 404,
  "error": "Not Found",
  "message": "No message available",
  "path": "/the-login/the-login/LoginTest"
 

如您所见,zuul 在路径中又添加了一个 /the-login ! 这是一个 swagger-ui 错误还是我有什么问题?

【问题讨论】:

【参考方案1】:

您在api-login 服务中使用the-login 作为上下文路径。因此,当您加载网关服务 swagger 时,它也会将 the-login 添加到 swagger 基本 url 中,就像这样。

这就是 the-login 被附加两次的原因(一个来自基本 URL,一个来自配置)。这可能是 swagger ui 中的一个错误。

我尝试了一种解决方法,它奏效了

从 application.yml 中删除 /the-login

zuul:
  prefix: /api
  routes:
    api-login:
      path: /login/**
      url: http://localhost:8070/
    api-other:

现在swagger资源不会加载,所以需要修改swagger资源路径。

在swagger资源中添加-login

resources.add(swaggerResource("login-service", "/api/login/the-login/api-docs", "2.0"));

【讨论】:

似乎不起作用...也许是zuul版本?你用的是什么版本? spring-cloud-starter-zuul:1.3.1.RELEASE github.com/hemantsonu20/api-gateway-sample/blob/master/… 更新了答案,请检查 嗯...但是这样做会阻止我调用 api,因为找不到它们... 我的意思是,我必须使用 /api/login/the-login/API 调用我的 api,但这会显示一些隐藏的细节,如上下文名称,我不希望这样......而且是重复。

以上是关于Swagger ui在zuul后面的时候在测试页面增加了一个/path的主要内容,如果未能解决你的问题,请参考以下文章

如何Spring Cloud Zuul作为网关的分布式系统中整合Swagger文档在同一个页面上

Zuul中整合Swagger2,实现对源服务API测试

Zuul中整合Swagger2,实现对源服务API测试

Zuul中整合Swagger2,实现对源服务API测试

Zuul中聚合Swagger的坑

Springfox swagger-ui.html无法推断基本URL - 由丢失的cookie引起