SpringBoot2.7.8整合Swagger3
为了方便编写接口文档,最近准备在框架中整合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.

直接搜这条提示也可以搜到一些解决方法,例如:
blog.csdn.net/just_now_and_future/article/details/89343680
blog.csdn.net/wjf8882300/article/details/107013993
blog.csdn.net/LeeKitch/article/details/126967804
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的配置类,网上很多,不细嗦了。
