欢迎光临散文网 会员登陆 & 注册

SpringBoot2.7.8整合Swagger3

2023-02-02 16:58 作者:枫憔叶波  | 我要投稿

为了方便编写接口文档,最近准备在框架中整合Swagger。

一开始整合了Swagger2,很顺利,但是部长说要向前看,整个最新的。。。

好吧,那就Swagger3。

遇到不少问题,有亿点折磨。

必要操作

  • 导入依赖

  • 在启动项上添加注解@EnableOpenApi

  • 配置application(2.6及以上的SpringBoot整合Swagger3都需要配这一项)

这样就可以通过网址localhost:8080/swagger-ui/index.html访问Swagger了。

当然,前提是你的项目还没有整合其他什么乱七八糟的东西。

下面就讲一下我遇到的问题。

404

一种可能是WebMvc配置类继承了WebMvcConfigurationSupport,这会覆盖默认的静态资源映射,导致Swagger的网页也无法被找到。此时就自己在继承了WebMvcConfigurationSupport的配置类中配置一下静态资源映射。这里把静态资源放在了"classpath:/static/"目录下,大家也可以自己调整。

也可能是因为配置了拦截器,将Swagger拦截了下来,可以在配置中将Swagger相关请求放行。如果是shiro配置方式略有不同,不会可以度娘,反正不要拦截了就行。当然,因为拦截器的功能不同,也不是一定会对Swagger产生影响的,有需要或者求稳就放行一下。

死循环

该问题指的是出现了以下弹窗,提示Unable to infer base url. This is common when using dynamic servlet registration or when the API is behind an API Gateway. 

直接搜这条提示也可以搜到一些解决方法,例如:

  1. blog.csdn.net/just_now_and_future/article/details/89343680

  2. blog.csdn.net/wjf8882300/article/details/107013993

  3. blog.csdn.net/LeeKitch/article/details/126967804

  4. blog.csdn.net/kikii233/article/details/116761596

反正还挺多的,五花八门,但是我一个个试下来都没解决。让人心态炸裂。

后来我是新建了一个空项目来尝试整合,结果根本没遇到这个问题!

我就对WebMvcConfig中的配置逐一排查了一下,发现是添加了请求前缀的原因:

我把这段代码注释掉后就可以顺利打开Swagger页面了。

PS:感谢评论区大佬Seasee_Yc 的指点,下面进行一点补充说明

Swagger页面应该是由上图的Controller来控制的,用到了@RestController注解,如果按照我的方式来添加请求前缀,对其也会产生影响,所以需要对addResourceHandlers方法进行调整,调整后如下:

然后Swagger的访问地址也要调整为localhost:8080/api/v1/swagger-ui/index.html

如果不希望给Swagger添加请求前缀怎么办呢?很简单,将configurePathMatch方法中的RestController用自定义注解替换即可。具体的替换步骤可以参考:www.jianshu.com/p/dde81efadb09

我觉得吧,替换了也好,避免以后再出现这样的问题。。。

可选操作

Swagger也可以自定义一些内容,就是编写Swagger的配置类,网上很多,不细嗦了。


SpringBoot2.7.8整合Swagger3的评论 (共 条)

分享到微博请遵守国家法律