Spring Boot整合Swagger UI启动触发UnsatisfiedDependencyException异常求助
解决Spring Boot 3 + Swagger UI启动崩溃的兼容性问题
我帮你分析下问题的核心原因和对应的解决办法:
问题根源:版本兼容性冲突
你当前使用的Spring Boot 3.0.0-SNAPSHOT是基于Jakarta EE 9+的版本(API包路径从javax.*迁移到jakarta.*),而你引入的springdoc-openapi:1.6.6是为Spring Boot 2.x设计的,它依赖旧的javax.* API,两者类路径不兼容,导致启动时出现类 introspect 失败的异常。
具体解决方案
1. 升级springdoc-openapi到适配Spring Boot 3的版本
springdoc从2.x版本开始全面支持Spring Boot 3,需要替换原有的springdoc依赖为最新的starter包:
// 替换原有的springdoc依赖 implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0") implementation("org.springdoc:springdoc-openapi-kotlin:2.2.0")
注:springdoc 2.x版本改用starter封装依赖,不再需要单独引入
springdoc-openapi-ui和springdoc-openapi-core,starter会自动管理相关依赖。
2. 切换到Spring Boot稳定版
3.0.0-SNAPSHOT是开发预览版,存在大量未修复的兼容性问题,建议替换为正式发布的稳定版,比如:
plugins { id("org.springframework.boot") version "3.2.0" // 其他插件版本保持适配即可 }
3. 调整Kotlin版本适配Spring Boot 3
Spring Boot 3.x要求Kotlin版本至少为1.8.x,你当前使用的1.6.20-RC版本过低,建议升级:
plugins { kotlin("jvm") version "1.8.22" kotlin("plugin.spring") version "1.8.22" }
4. 优化JOOQ依赖配置
你的JOOQ部分依赖属于构建时工具,无需放入运行时依赖,调整如下:
// 运行时依赖保留核心包 implementation("org.jooq:jooq-meta") implementation("org.jooq:jooq-kotlin") implementation("org.jooq:jooq-meta-extensions") // 代码生成工具放在annotationProcessor中 annotationProcessor("org.jooq:jooq-codegen") // 移除jooq-codegen-maven(Gradle环境下不需要)
5. 检查并清理依赖冲突
运行Gradle命令查看依赖树,排查是否存在javax.*和jakarta.*的混合依赖:
./gradlew dependencies
如果发现有遗留的javax.*依赖,通过exclude排除,例如:
implementation("某依赖") { exclude(group = "javax.servlet") }
额外排查点
如果升级后仍有问题,检查你的SecurityConfig是否正确配置了Swagger端点的访问权限:
@Configuration class SecurityConfig { @Bean fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { http.authorizeHttpRequests { auth -> // 允许Swagger相关端点无需认证 auth.requestMatchers("/swagger-ui/**", "/v3/api-docs/**").permitAll() // 其他请求配置认证 auth.anyRequest().authenticated() } return http.build() } }
内容的提问来源于stack exchange,提问作者KittyCat
相关产品推荐
相关产品推荐

