Springdoc OpenAPI ui 不支持“位置”中的上下文路径

sch*_*obe 5 swagger swagger-ui springdoc springdoc-ui springdoc-openapi-ui

设置:

springdoc-openapi-ui在一个简单的 spring-boot 项目中使用1.4.0 版本(通过 Maven)中的 Java 库,没有任何自定义。

Swagger 页面在https://my-url.com/my-context-path/swagger-ui/index.html下生成

https://my-url.com/my-context-path/v3/api-docs/下的 api-docs

这两个都有效,我可以联系到他们。到现在为止还挺好!

现在的问题:

当简单地导航到https://my-url.com/my-context-path/swagger-ui.html 时,我得到一个 HTTP 状态 302 和一个location在响应头中设置的属性,它应该将我重定向到 swagger 页面从上面(我假设)。

但是,location属性中的 URL缺少上下文路径!它看起来像这样:https : //my-url.com/swagger-ui/index.html?configUrl=/v3/api-docs/swagger-config

它重定向到一个不存在的页面,我收到 404 错误代码。请注意,configUrl 似乎也缺少上下文路径。

任何想法为什么会发生这种情况以及如何解决?

这个 Github 问题似乎是同样的问题,但最后声明问题已解决:https : //github.com/springdoc/springdoc-openapi/issues/37,这是针对比我更早的版本。

pet*_*ius 6

好吧,问题是springdoc-openapi-ui不知道你的应用程序上下文路径,除非它是在 Spring Boot 中定义的,这可能对每个人来说都是不可能的。

X-Forwarded-Prefix希望它确实支持网关可以发送的非标准标头。

就我而言(Kubernetes),只需添加即可在图表中配置 Ingressnginx.ingress.kubernetes.io/x-forwarded-prefix: "true"

在您的应用程序配置中,您还需要指定

server:
  forward-headers-strategy: framework
Run Code Online (Sandbox Code Playgroud)

使用 Spring 支持处理转发的标头。

资料来源:

https://github.com/kubernetes/ingress-nginx/issues/3670

https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#x-forwarded-prefix-header

https://github.com/springdoc/springdoc-openapi/issues/607


bri*_*bro 0

关于上下文路径的使用没有已知的问题。如您所知,#37 已解决,并且报告已证实这一点!

只需确保遵循在标准 spring-boot 应用程序上设置 context-path 的说明即可。

您可以在不同的演示示例中测试上下文路径的配置:

如果您有任何问题,您可以通过提供最小/可重现的示例或通过重现问题的单元测试来记录问题。

  • 看来我的问题是由于上下文路径实际上不是我的应用程序的一部分(未设置“server.servlet.context-path”),而是由于部署应用程序的“网关”所致。当我在本地运行服务时,没有上下文路径,并且一切正常,但部署后,可以在 /my-context-path 下访问该服务。因此,设置 `server.servlet.context-path` 对我来说不是一个选择,因为应用程序实际上没有上下文路径。您知道解决方法吗? (3认同)