Groovy Swagger @requestBody 加载超时 一键搞定
最近在写一个 Springboot 项目时,需要接入 Swagger 功能,过程中遇到了几个问题,其中就数@requestBody
不兼容 Swagger 的情况最难受,其他还有遇到问题,这里整理一下,分享一下解决方案。这里希望把 Swagger 当做一个接口文档展示和接口调试的工具,而且支持测试环境和上线后的环境。
@requestBody 兼容性问题
关于这个问题网上搜到的两个方案排名靠前:
通过环境配置,分开线上和线下环境,避开这个兼容性问题
通过修改参数解析器解决
这里复制一下大神的分析结论:
FunTester 原创专题推荐~
根本问题是 springmvc 中独立的参数解析器功能和 swagger 功能上的冲突,一个要求不能加上 @RequestBody 注解,一个要求必须加上 @RequestBody 注解。从 springmvc 入手,想办法提高自定义参数解析器的优先级,只要自定义的参数解析器优先级比 RequestResponseBodyMethodProcessor 高,则就可以在自定义的参数上加上 @RequestBody 注解,swagger 功能自然而然就能正常了。从 Swagger 入手,想办法解决掉上面两部分对 @RequestBody 的单独判定,不修改 springmvc 相关功能也可以让 swagger 功能正常。考虑到修改 springmvc 功能可能会对以后的版本升级造成较大影响,这里决定利用切面修改原有的 swagger 对 @RequestBody 的两个地方的行为。
-- By FunTester
但是这两个方案对我来讲的确略微复杂了,总的来说不好抄,就是抄完代码发现很多注解和 import 没有对应的依赖,自动搜索添加后又面临一些版本兼容的问题,所以暂时放弃了。
Swagger API 请求超时
这个问题存在 Swagger 2 和 Swagger 3 版本,一开始我在 Swagger 3 上遇到了,但是很奇怪我切换回 Swagger 2 就解决了。当时怀疑是 Swagger 3 和 Groovy 的兼容性问题。没太注意,后面被迫切换到 Swagger 3(也是判断失误导致的),逼得不得不解决这个问题。
经过查询 stackoverflow 网站,原因是groovy.lang.MetaClass
的问题,Groovy 所有类都继承groovy.lang.MetaClass
,数据量非常大,导致生成 Swagger JSON 文件的过程中耗时非常多,我本地运行使用了 30 s 左右。
一键解决
方案依然来源于stackoverflow
,就是在 Swagger 配置中把groovy.lang.MetaClass
过滤掉即可。虽然这个方案是为了解决生成 Swagger JSON 耗时较长的问题,但是经过测试发现顺带的把@requestBody
的兼容性问题也一起解决了。这真是意外之喜。
FunTester 原创专题推荐~
-- By FunTester
版权声明: 本文为 InfoQ 作者【FunTester】的原创文章。
原文链接:【http://xie.infoq.cn/article/5dc95f79bbfd82754f91c80a0】。文章转载请联系作者。
评论