SpringBoot访问Swagger报No operations defined in spec错误求解
SpringBoot集成springdoc出现"No operations defined in spec!"排查步骤
你当前使用的版本匹配无问题:Spring Boot 2.7.1对应springdoc-openapi-ui 1.6.9是官方兼容的版本,既然业务代码、pom和可正常运行的参考项目完全一致,按以下优先级从高到低排查即可:
- 检查启动类位置与包扫描范围
这是新手最容易踩的问题:SpringBoot启动类必须放在所有业务代码(Controller、Service等)所在包的根路径下。比如你的Controller全在com.danceevents.controller包,启动类就必须放在com.danceevents包下,不能放在com.danceevents.controller或者其他零散子包,更不能放在默认包下。如果项目结构特殊必须调整扫描范围,在启动类上添加@ComponentScan(basePackages = "com.danceevents")明确指定扫描根包。 - 检查Controller层注解完整性
确认所有Controller类都添加了@RestController(或组合了@ResponseBody的@Controller)注解,接口方法上都添加了对应的请求映射注解(@GetMapping/@PostMapping/@RequestMapping等),漏加任何一个都会导致Spring不把该类/方法识别为接口,springdoc自然无法采集到接口信息。 - 检查springdoc扫描配置
查看你的application.yml或application.properties配置文件,有没有手动配置过springdoc的扫描规则,如果有,确认配置的扫描包路径、路径匹配规则和实际项目一致。没有配置过可以手动添加配置强制指定扫描范围:
yaml格式配置:
properties格式配置:springdoc: packages-to-scan: com.danceevents.controller paths-to-match: /**springdoc.packages-to-scan=com.danceevents.controller springdoc.paths-to-match=/** - 排查IDE编译与缓存问题
你用的是Spring Tool Suite,先在项目上右键执行Maven -> Update Project,勾选Force Update of Snapshots/Releases更新依赖,再执行Run As -> Maven clean清空编译产物,之后重新启动项目。同时可以暂时注释掉pom里的spring-boot-devtools依赖重启验证,部分场景下devtools的类加载隔离机制会导致springdoc扫描不到业务类。 - 验证问题根因位置
启动项目后直接访问http://localhost:你的服务端口/v3/api-docs:- 如果返回的JSON结构中
paths字段是空对象,说明springdoc确实没有扫描到任何接口,回到前面几个步骤逐一核对 - 如果
paths字段下能看到你写的所有接口路径,说明接口扫描正常,问题出在Swagger UI静态资源加载,清理浏览器缓存、换无痕模式访问即可。
- 如果返回的JSON结构中
注意:springdoc 1.6.9版本默认的Swagger UI访问地址是
http://localhost:端口/swagger-ui.html,不要写错访问路径。
内容的提问来源于stack exchange,提问作者JarveyD
相关产品推荐
相关产品推荐

