swagger 提示 'Unable to find specification for group default'
问题
今天调试接口时,发现swagger无法加载出来数据,因为用的是 knife4j 进行的集成,表现为请求数据接口 404 :
后台日志报警告信息 Unable to find specification for group default
但是其他模块正常
解决
找直接根源
既然有告警信息,那就好办了,我们先在idea中全局搜索这个报错信息,发现这个报错信息来自 springfox.documentation.swagger2.web.Swagger2ControllerWebMvc
这个类,
从名称面来看,应该是一个接口类,然后找到了对应的方法 getDocumentation()
我们debug看下:
可以看到获取到的值为 null
,而 DocumentationCache
这个对象呢,网上搜索到的信息显示,这个对象中,保存的是文档信息的缓存,所以很明显,这里没有找到任何数据
分析 DocumentationCache
既然 DocumentationCache 正常情况下,应该是有数据的,那我们就看看,什么时候这个对象会被加载数据,又在网上搜索了下,发现是由 DocumentationPluginsBootstrapper
这个类进行加载的
由文档加载器DocumentationPluginsBootstrapper进行加载,类实现了SmartLifecycle接口,当spring加载完bean后,调用start()方法进行加载。
而start()方法,又调用了父类的 bootstrapDocumentationPlugins() 方法
看下这个方法做了什么事情
从代码可以看到会调用到另外的方法 scanDocumentation()
此时,我们在这个地方打点断,然后重新启动,跟着断点一步一步的往下走
到这个地方的时候,我们发现,捕获到了一个异常
打开异常信息,可以看到这句话:
结果
看到这句话,我恍然大悟,是刚刚写的接口用的注解出错了
关键就在于 @RequestParam 这个注解
点进去看源码,我们可以看到这个注解的 value 与 name 属性,是互为别名的,而我写的时候写错了,勿把 name 属性当成注释用了
实际如果我想在 swagger 文档中给参数加个说明的话,我应该使用 @ApiParam 注解
参考资料:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构