Springdoc 2.8.15与Spring Boot 3.5.11兼容异常:使用@Parameter/@OpenApiDefinition注解触发NoSuchMethodError错误
Springdoc 2.8.15与Spring Boot 3.5.11兼容异常:使用@Parameter/@OpenApiDefinition注解触发NoSuchMethodError错误
兄弟,这个问题我前段时间刚踩过坑!本质就是Swagger OAS注解的版本不匹配导致的依赖冲突,给你一步步拆解解决:
错误原因分析
你碰到的NoSuchMethodError: 'io.swagger.v3.oas.annotations.media.Schema$RequiredMode io.swagger.v3.oas.annotations.media.Schema.requiredMode()',核心是项目里同时存在两个不同版本的io.swagger.v3.oas.annotations包:
- Spring Boot 3.5.11的默认依赖可能引入了旧版的Swagger注解,这个版本里
Schema类还没有requiredMode()方法; - 而Springdoc 2.8.15需要调用这个方法来处理
@Parameter、@OpenApiDefinition这类注解,版本不匹配就触发了错误。
具体解决步骤
1. 排查依赖树,定位冲突
先执行Gradle命令查看依赖树,找出重复引入的Swagger相关依赖:
./gradlew dependencies --configuration compileClasspath | grep -A 5 -B 5 swagger
执行后你会发现,可能是Spring Boot的starter或者其他第三方依赖,悄悄引入了旧版本的swagger-annotations或swagger-core,和Springdoc需要的版本打架。
2. 强制统一Swagger注解版本
在你的build.gradle里,添加依赖版本强制规则,把Swagger注解和模型包的版本统一为和Springdoc 2.8.15兼容的稳定版本:
configurations.all { resolutionStrategy.force 'io.swagger.core.v3:swagger-annotations:2.2.20' resolutionStrategy.force 'io.swagger.core.v3:swagger-models:2.2.20' }
3. 验证依赖是否生效
重新同步Gradle依赖后,再执行命令检查版本:
./gradlew dependencies --configuration compileClasspath | grep swagger-annotations
确保输出里只有你刚才指定的2.2.20版本,没有其他旧版本的痕迹。
4. 测试注解功能
现在再把@Parameter或@OpenApiDefinition注解加回去,启动应用,应该就能正常生成API文档,不会再触发那个错误了。
额外注意事项
- 以后升级Springdoc或Spring Boot时,一定要先核对版本兼容矩阵,Spring Boot 3.5.x系列对应Springdoc 2.8.x是没错,但要警惕其他依赖偷偷带进来的旧版Swagger包;
- 如果项目里还有其他用到Swagger注解的第三方组件,也要确保它们的版本和你强制指定的版本兼容,避免二次冲突。




