记录一次swagger2踩坑记,网上资料杂乱而不完整,自己踩的坑还算比较多,记录下自己的解决历程
一、首次来看看遇到的第一个坑,如下:
Unable to infer base url. This is common when using dynamic servlet registration or when the API is behind an API Gateway. The base url is the root of where all the swagger resources are served. For e.g. if the api is available at http://example.org/api/v2/api-docs then the base url is http://example.org/api/. Please enter the location manually:
可以说配置swagger2会有80%的幸运儿被拦在这里,然后寻常的百度,解决方案有
(1).把@EnableSwagger2注解加在主启动类
(2).主启动类加上@ComponentScan("swagger配置类所在包")
(3).将WebSecurityConfig与ScheduleConfig置于同一路径
(4).替换为低版本的swagger如2.6.1
如果以上方案可以解决您的问题,那么恭喜您,错过了后边的深坑。。
二、如果以上方案没有解决您的问题,那么请继续往下看:
上述图出现一般会伴随以下情况
(1)后端会一直被循环调用
(2)如果你的日志级别配置了org.springframework.security级别为DEBUG的话
您还会看到日志中访问swagger2路径一直出现null
首先回答第一个问题出现的原因:这个是由于http://localhost:8090/demo/swagger-ui.html 这个地址一直未关闭,所以一直在请求后端,所以一直在循环调用。那么我们测试的时候,如果报了这个错的话,记得及时将页面关闭掉,防止电脑cpu飙升哦。
第二个问题就比较重要了,也是我们解决问题的关键。报错日志出现null/swagger-ui.html路径,是因为mvc没有匹配到对应静态资源,所以我们需要在webwvc添加匹配静态资源 ,springboot配置如下
@Configuration
@EnableWebMvc
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
解决完路径null异常的话,问题也就解决了一大半了。
三、一般下一个坑就是403没有权限了,权限配置则比较简单,网上一搜全都是答案
http.authorizeRequests()
.antMatchers("/v2/**", "/configuration/ui", "/swagger-resources/**",
"/configuration/security", "/swagger-ui.html", "/webjars/**")
.permitAll();
四、以上问题方法试过以后,大多是可以解决掉问题的,如果还是不能够解决问题,这个时候尝试 降级处理,版本2.6.1。
楼主就是坚持到最后一个坑的男人。。。
五、总结
1.出现问题不要着急百度,不一定与你的问题完全相符
2.没有任何日志现象时,调高日志级别,查看报错信息