SpringBoot 整合swagger-bootstrap-ui出现404错误
描述
正常情况下,项目引入swagger-bootstrap-ui依赖(如下)
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.1</version>
</dependency>
进行配置:
@Configuration
@EnableSwagger2
public class SwaggerConfig {
/**
* 初始化创建Swagger Api
*/
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
// 详细信息定制
.apiInfo(apiInfo())
.select()
// 指定当前包路径
.apis(RequestHandlerSelectors.basePackage("com.xxx"))
// 扫描所有
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build().groupName("项目名");
}
/**
* 添加摘要信息
*/
private ApiInfo apiInfo() {
// 用ApiInfoBuilder进行定制
return new ApiInfoBuilder()
.title("项目标题")
.description("描述:接口文档")
.contact(new Contact("Fame-springBoot-Swagger2", null, null))
.version("版本号: 1.0")
.build();
}
}
引入依赖进行配置,正常项目是没有问题的,都可以访问,但是奇怪的是有一个项目不论如何配置就是无法展示…
排查1:
其他项目都没有问题,唯独其中一个无法展示,所以,swagger引用和配置应该没有问题(可以排除)
排查2
查看拦截器配置,是否是拦截器配置不生效(果然[破涕为笑](定位))
和我上一篇文章中提到的拦截器冲突一样,感兴趣的可以查看记录SpringBoot中拦截器冲突导致不生效的原因
不多说在继承WebMvcConfigurer的拦截器中重写addResourceHandlers,代码如下:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
/**注意这个配置,如果配置swagger-bootstrap-ui的位置不对,也是出现404的一个原因*/ registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
[文末小彩蛋] 1
至此,404bug修复,可以访问localhost:port/doc.html,完美.
发布还遇到一个小问题:发布出现,需要登录认证,也是拦截器的问题,需要在拦截器中放行该链接,修改的地方是找到代码中继承HandlerInterceptorAdapter的类,在preHandle方法中将该地址放心即可. ↩︎