项目场景:
正在学习搭建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的问题,没有实际遇到,有问题欢迎指正!