项目场景:

正在学习搭建Springcloud项目,正好打算集成下Swagger,方便调用,不用开postman测试。按网上教程集成,报错404,搞了好久都没解决,开始以为是自己Springcloud项目依赖冲突,又建了个Springboot项目,依旧报错。疯了~

项目背景:

本文章贴图内容采用的是Swagger3版本进行的集成,Swagger2的话同样处理,适配,不同点在于2的调用地址(http://localhost:9011/swagger-ui.html),细节集成可以搜下别人的,这里只做404踩坑记录


问题描述一:

一定要留意报错的信息,归根结底还是自己基础太薄弱

在这里插入图片描述


解决方案:

去除当前服务的context-path配置!或者补全swagger的访问地址!

这里因为自己习惯了给项目指定路径server.servlet.context-path:

在这里插入图片描述
访问的正确地址:http://localhost:9011/auth-server/swagger-ui/index.html

在这里插入图片描述

以上终于解决了困扰了许久的问题


问题描述二:

在这里插入图片描述
我的问题是在引入三方ui依赖,knife4j。访问doc.html遇到的。

解决方案:

遇到如上报错,主要还分两种情况:

1、可能是因为当前环境拦截了 Swagger 默认的静态资源,只需在配置类文件中实现 WebMvcConfigurer 接口并重写 addResourceHandlers 方法即可。

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

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

2、依赖引入问题 或 访问路径问题

具体还是Swagger2和3的区别,注解区别和访问地址。

Swagger2的注解是@EnableSwagger2;3.0版本已经移除了 @EnableSwagger2 注解,使用@EnableOpenApi

结果:

在这里插入图片描述
完美解决


问题描述三:

项目使用了Spring Security

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/swagger-ui.html", "/webjars/**", "/v2/**", "/swagger-resources/**")
                .permitAll()
                .anyRequest()
                .authenticated();
    }
}

和上面的WebMvcConfig一样,需要确保Swagger的资源路径被允许匿名访问。这也是其中一种导致404的问题,没有实际遇到,有问题欢迎指正!

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐