You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 22:05:31