本人菜鸟弱鸡一枚,最近入手一个新项目,在我看来很高大上,分布式、微服务的SpringBoot项目。在这个项目中我负责单独开发一个模块,开发完后与同事联调结果发现没有接口文档,没办法,上swagger。
swagger是一个在线文档,之前用过别人集成的,感觉还不错,这次自己集成到项目中。不过,swagger2已经被官方停维了,所以我决定采用最新的swagger 3,也就是SpringFox 3。根据文档,引入了SpringFox后,配置好SpringFox后,兴致冲冲的启动项目,访问地址:http://IP:端口/项目上下文/swagger-ui/,结果访问不了
这是个难题啊,没得说,找度娘,网友很给力,有很多回答,不过,看了很多回答记录,总的来说就是几条:
- 配置错误,导致swagger未启动
- 版本变更大,页面路径错误
- 拦截器拦截了swagger请求
大概都是这三种吧,由于springFox 3没找到太多资料,现在记录下我的解决方法:
问题一、SpringFox是springboot的swagger,所以它的配置不多,只要在springboot启动文件App.java中加入@EnableOpenApi注解即可
其他的东西都是可选配置的,目前我们先要确保swagger能访问才是关键。所以其他的配置先不管
问题二由问题一可知,页面之类的不用管,所以这个问题排除,当然SpringFox 3对于JDK有版本要求,必须是JDK 8以上才行
问题三有可能,但经过查找这个不是我的问题,当然,如果是解决方法也很简单,将SpringFox的相关路径/swagger-resources/、/swagger-ui/等配置忽略不拦截就可以了。
三个问题都不是我的问题,还有什么问题呢?经过一翻跟踪,我找到了一个特殊的注解:@ControllerAdvice,统一处理的注解,我....,这年头还有人用@ControllerAdvice不给范围的,这有点坑啊,试下给@ControllerAdvice加上范围后,重启,访问:http://IP:端口/项目上下文/swagger-ui/,成功,swagger成功出现。
总结,SpringFox主要问题排除点在于1、启动时的注解@EnableOpenApi,2、地址是否被过滤器拦截,3、是否有配置全局的@ControllerAdvice,并对返回结果的结构进行重构处理,4、页面的访问路径是否是:http://IP:端口/项目上下文/swagger-ui/ 或 http://IP:端口/项目上下文/swagger-ui/index.html 。就这四点