springboot整合swagger2打不开swagger-ui.html或者doc.html的问题记录


一.问题背景

  用springboot整合swagger依赖,编译运行后,发现可以打开http://localhost:8888/swagger-ui.html这个页面(正常显示),却无法打开http://localhost:8888/doc.html这个页面,报错404。pom.xml文件导入依赖如下:

 二.解决思路

  通过搜索检阅发现需要导入swagger-bootstrap-ui这个依赖,导入依赖后依然访问不到doc.html这个页面。检查上述依赖是否完整导入(由于导入时网络不好),检查本地仓库依赖是否完整,git重置本地仓库到上个一个版本(git checkout),清除掉untracked的文件(git clean -df)。重新导入依赖,排除依赖导入不完整的情况下,依然出现上述问题。

通过查阅发现,需要为springmvc在写一个配置类,配置类如下:

@Configuration
public class MyWebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOriginPatterns("*")
                .allowedHeaders("*")
                .allowCredentials(true)
                .allowedMethods("*");
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
    }
}

重写addResourceHandlers方法,添加resource location配置,重新编译后成功解决上述问题。(亲测有效)

网上其他解决思路:两个ui依赖去掉swagger-ui这个依赖,只用swagger-bootstrap-ui依赖,重新导入编译访问页面。(我觉得这个应该和两个ui版本过低互相有冲突有关,尽量导入较高版本的依赖,)