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的主要内容,如果未能解决你的问题,请参考以下文章