springBoot整合swagger-bootstrap-ui报404错误解决

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,完美.


  1. 发布还遇到一个小问题:发布出现,需要登录认证,也是拦截器的问题,需要在拦截器中放行该链接,修改的地方是找到代码中继承HandlerInterceptorAdapter的类,在preHandle方法中将该地址放心即可. ↩︎

你可能感兴趣的:(IT技术,java,bootstrap,spring,boot,ui)