Spring Boot 2集成OpenAPI Swagger重定向后页面404问题求助
Spring Boot 2集成OpenAPI Swagger 404问题排查与修复
1. 核心问题:Swagger启用状态未设置默认值
你的SwaggerConfig中,customOpenApi()方法会在swagger.isEnabled()为false时返回null,但setDefaults()方法未给ExodusConfigSwaggerApp的enabled字段设置默认值。如果配置文件未显式开启swagger,该属性默认可能为false,导致OpenAPI Bean无法创建,进而swagger-ui因找不到配置文件引发404。
修改setDefaults()方法,添加enabled默认值:
private ExodusConfigSwaggerApp setDefaults() { ExodusConfig config = Optional.ofNullable(exodusConfig).orElse(new ExodusConfig()); ExodusConfigSwagger swagger = Optional.of(config).map(ExodusConfig::getSwagger).orElse(new ExodusConfigSwagger()); ExodusConfigSwaggerApp app = Optional.of(swagger).map(ExodusConfigSwagger::getApp).orElse(new ExodusConfigSwaggerApp()); // 新增:给enabled设置默认启用状态 app.setEnabled(Optional.ofNullable(app.isEnabled()).orElse(true)); app.setName(setOrDefault(app.getName(), "default")); app.setVersion(setOrDefault(app.getVersion(), "unknown")); app.setApm(setOrDefault(app.getApm(), "unknown")); app.setPorttype(setOrDefault(app.getPorttype(), "unknown")); app.setServicekey(setOrDefault(app.getServicekey(), "unknown")); app.setDescription(setOrDefault(app.getDescription(), "default")); app.setVendor(setOrDefault(app.getVendor(), "default")); app.setContactEmail(setOrDefault(app.getContactEmail(), "default")); app.setContactName(setOrDefault(app.getContactName(), "default")); app.setContacturl(setOrDefault(app.getContacturl(), "default")); app.setConfluencePage(setOrDefault(app.getConfluencePage(), "default")); app.setAuthorizationType(setOrDefault(app.getAuthorizationType(), "Bearer")); return app; }
2. 验证依赖版本兼容性
Spring Boot 2.x与springdoc-openapi-ui版本需匹配:
- Spring Boot 2.6.x:推荐使用
springdoc-openapi-ui:1.6.x - Spring Boot 2.7.x:可使用
springdoc-openapi-ui:1.7.x
若你的Spring Boot版本低于2.6,建议降级springdoc-openapi-ui到1.5.x版本,避免兼容性冲突。
3. 检查静态资源拦截配置
如果项目使用Spring Security或自定义WebMvcConfigurer,可能拦截了swagger-ui的静态资源:
Spring Security放行配置
@Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/swagger-ui/**", "/v3/api-docs/**") .permitAll() .anyRequest() .authenticated(); }
自定义WebMvcConfigurer静态资源映射
@Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/swagger-ui/**") .addResourceLocations("classpath:/META-INF/resources/webjars/springdoc-openapi-ui/"); }
4. 先验证API文档端点
直接访问http://localhost:8080/v3/api-docs:
- 若返回正常OpenAPI JSON数据,说明文档生成正常,问题出在swagger-ui静态资源加载
- 若返回404,回到第一步确认Swagger启用状态是否正确设置
5. 清理缓存重启应用
执行Maven/Gradle的clean命令清理依赖缓存,重启应用后再测试swagger-ui访问。
内容的提问来源于stack exchange,提问作者Patrick Aquilone
相关产品推荐
相关产品推荐

