Swagger 不正确的 API 路径

问题描述 投票:0回答:1

我正在使用 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

有没有人遇到同样的问题并找到了解决方案??

spring-boot swagger swagger-ui
1个回答
0
投票

直接修复

不要使用上下文(也不是 (mvc) servlet)路径:

  1. 在员工服务和产品服务中
    application.yaml
  2. 在网关服务中(文档控制器,位置...(openapi 定义))

(为什么人们需要“在云中”使用它们?如果是这样,人们应该知道自己在做什么......因此)

Github 分支:https://github.com/xerx593/swagger-zuul/tree/fix-straight

(Swaagger-Try-Out 指向

http://localhost:20000/prod/products
,但它有效!;)


哈基修复

保持/坚持(非默认)上下文(和/或servlet)路径,我们需要像这里这样的小技巧(thx):

在 swagger 中为请求添加上下文路径

(对于大多数微不足道的情况)我们可以像这样操纵“操作路径”:

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 映射”而工作(也))

© www.soinside.com 2019 - 2024. All rights reserved.