swagger 提示 'Unable to find specification for group default'

问题

今天调试接口时,发现swagger无法加载出来数据,因为用的是 knife4j 进行的集成,表现为请求数据接口 404 :

image

后台日志报警告信息 Unable to find specification for group default

但是其他模块正常

解决

找直接根源

既然有告警信息,那就好办了,我们先在idea中全局搜索这个报错信息,发现这个报错信息来自 springfox.documentation.swagger2.web.Swagger2ControllerWebMvc 这个类,

从名称面来看,应该是一个接口类,然后找到了对应的方法 getDocumentation()

image

我们debug看下:

image

可以看到获取到的值为 null,而 DocumentationCache 这个对象呢,网上搜索到的信息显示,这个对象中,保存的是文档信息的缓存,所以很明显,这里没有找到任何数据

分析 DocumentationCache

既然 DocumentationCache 正常情况下,应该是有数据的,那我们就看看,什么时候这个对象会被加载数据,又在网上搜索了下,发现是由 DocumentationPluginsBootstrapper 这个类进行加载的

由文档加载器DocumentationPluginsBootstrapper进行加载,类实现了SmartLifecycle接口,当spring加载完bean后,调用start()方法进行加载。

image

而start()方法,又调用了父类的 bootstrapDocumentationPlugins() 方法

看下这个方法做了什么事情

image

从代码可以看到会调用到另外的方法 scanDocumentation()

此时,我们在这个地方打点断,然后重新启动,跟着断点一步一步的往下走

image

到这个地方的时候,我们发现,捕获到了一个异常

打开异常信息,可以看到这句话:

image

结果

看到这句话,我恍然大悟,是刚刚写的接口用的注解出错了

image

关键就在于 @RequestParam 这个注解

image

点进去看源码,我们可以看到这个注解的 value 与 name 属性,是互为别名的,而我写的时候写错了,勿把 name 属性当成注释用了

实际如果我想在 swagger 文档中给参数加个说明的话,我应该使用 @ApiParam 注解

参考资料:

https://blog.csdn.net/lvzhyt/article/details/117027177

posted @ 2021-08-12 22:11  会飞的小黑鱼  阅读(4341)  评论(0编辑  收藏  举报