我正在使用 swagger 和 swagger UI 来记录我的 API。这是在 spring boot 微服务设置中。我正在将所有 swagger 文档整合到我的 zuul 网关中。这一切都可以很好地显示文档。 但是,当您尝试使用 Try It Out 按钮执行 API 时,这会失败,因为用于命中端点的路径不正确。具体来说,swagger 似乎期望下游服务没有上下文根。无论如何我可以将其配置为接受上下文根吗?
我在这个 repo 上重现了这个问题https://github.com/craigmgordon/swagger 如果我运行服务并点击 http://localhost:20000/swagger-ui.html 上的网关,我可以看到我的两个服务的文档正确显示。
你可以看到页面顶部的url是正确的http://localhost:20000/prod/product/v2/api-docs
'prod' 是产品服务的 zuul 路径 “产品”是产品服务上下文路由
如果我尝试在 /products 端点上使用 Try ITOut,在执行时我会收到 404,因为它试图访问 url http://localhost:20000/prod/products 即省略了上下文路由。 正确的 url 应该是 http://localhost:20000/prod/product/products
有没有人遇到同样的问题并找到了解决方案??
不要使用上下文(也不是 (mvc) servlet)路径:
application.yaml
(为什么人们需要“在云中”使用它们?如果是这样,人们应该知道自己在做什么......因此)
Github 分支:https://github.com/xerx593/swagger-zuul/tree/fix-straight
(Swaagger-Try-Out 指向
http://localhost:20000/prod/products
,但它有效!;)
保持/坚持(非默认)上下文(和/或servlet)路径,我们需要像这里这样的小技巧(thx):
(对于大多数微不足道的情况)我们可以像这样操纵“操作路径”:
new Docket(DocumentationType.SWAGGER_2)
.pathProvider(
new PathProvider() {
@Override
public String getApplicationBasePath() {
return "/unknownFunction1/"; // ??
}
@Override
public String getOperationPath(String s) {
return s.replace("/employees", contextAndServletPath() + "employees");
}
@Override
public String getResourceListingPath(String s, String s1) {
return "/unknownFunction2/"; // ??
}
}
) // ...
在哪里
contextAndServletPath()
可能看起来像这样:
@Autowired
ServerProperties serverProps;
@Autowired
WebMvcProperties webMvcProps;
private String contextAndServletPath() {
return serverProps.getServlet().getContextPath() + webMvcProps.getServlet().getPath();
}
...我不喜欢它。
Github 分支:https://github.com/xerx593/swagger-zuul/tree/fix-hack
(Swagger-try-out指向
http://localhost:20000/prod/product/products
...)
(抱歉回答晚了:)
打开这些旧项目,我的 IDE“跳向我”(有几个警告、安全热点等)...
这就是我引用*c的方式:
https://github.com/xerx593/swagger-zuul/tree/fix-upgrade
(Swagger-tryout 分别指向
http://<my/some_local_ip>:8081
和 http://<my/some_local_ip>:8082
......并且由于“cors 映射”而工作(也))