Spring boot + Swagger 2.9.2
一、兼容的guava
1、一开始我使用的是guava的26.0-jre/27.0-jre发现都会报错,maven提示guava冲突 omitted for conflict with 后来换成20.0的,发现maven的冲突就不存在了
二、提示Swagger-ui提示url的弹窗
1、解决办法
1.1、配置addResourceHandlers
/**
* 这里是去swagger-ui的jar包下面去把文件做一次转换,保证访问
* @param registry
*/
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
// 解决静态资源无法访问
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
// 解决swagger无法访问
registry.addResourceHandler("**/swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
}
注意:addResourceLocations标注的是swagger-ui的jar下面的文件位置
addResourceHandler 标注的是一个匹配的表达式。自己对比看下
1.2、配置createRestApi
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.cs.commonapi.controller.api"))
.paths(PathSelectors.any())
.build();
}
这里的包名:com.cs.commonapi.controller.api,要注意至少需要制定到项目层级com.cs.commonapi.controller的***同级目录***,当然可以向下延伸
二、提示Swagger-ui页面空白了
1、点开F12看一下是不是有js什么没有加载进来
我发现是因为我的shiro导致了,我的很多东西都无法加载,所以后面我对于shiro的config做了一些配置,当然写法不固定,自行适配自己的引入写法
//swagger文档以及其静态资源
filterChainDefinitionMap.put("/swagger-ui.html", "anon");
filterChainDefinitionMap.put("/webjars/**", "anon");
filterChainDefinitionMap.put("/swagger-resources/**", "anon");
filterChainDefinitionMap.put("/v2/api-docs", "anon");
注意:
第一行可能影响页面打不开,很容易发现
第二/三行可能影响静态资源,这个也很容易发现,点开f12就OK了
第四行可能影响文档部分提示:Unable to render this definition