xiaoymin / knife4j

Knife4j is a set of Swagger2 and OpenAPI3 All-in-one enhancement solution
https://doc.xiaominfo.com
Apache License 2.0
4.12k stars 619 forks source link

调试使用的接口host url不正确 #422

Closed DoraemonAndRat closed 1 year ago

DoraemonAndRat commented 2 years ago

版本号:3.0.3

我现在这个项目是针对原生swagger进行微服务整合的(springcloud gateway),具体做法是网关上放一个swagger去访问子服务的swagger,通过swagger右上角不同的tab去访问各自不同的子服务,然后网关通过配置的路由路径访问/[子服务路由]/v3/api-docs,然后由后置拦截器修改这个接口返回servers.url,把服务的路由路径添加到前面,这样就可以修改swagger的inferred url,比如说这里我添加了一个system的路由路径:

微信截图_20220222165050 微信截图_20220222165242

这样我使用网关上的swagger的try it out是可以正常通过子路由访问子服务的swagger上的接口的。

然后我在knife上看host显示也是正确的:

微信截图_20220222170305

但是我使用调试功能的时候发现访问接口并没有使用这个host去访问,而是直接使用了网关地址,缺了子路径,直接就404了。

我尝试使用“个性化设置”里的的host,但是发现这个设置是全局的,并不能通过左上角tab选择各个服务去动态变化(每次切换都换调用/v3/api-docs接口,我在网关拦截器里返回的路由路径会变化)。

有何解决方案?

xiaoymin commented 1 year ago

感觉和这个context-path 的issue有关系

https://github.com/xiaoymin/swagger-bootstrap-ui/issues/423

如果项目访问非根目录,而是设置了context-path,knife4j提供的之前版本确实有问题,因为openapi3的规范里面没有basePath的属性定义。

可以试试4.0.0版本的,看看解决了没有

xiaoymin commented 1 year ago

这个issue我先close了,如果后期有问题在新开一个,感谢