上一篇SpringBoot实现Swagger接口响应信息自定义(一)讲到了实现Swagger接口响应信息自定义的初版解决方案,本篇讲述终版解决方案。
场景
接口相关信息如路径、参数等数据可能来自枚举、模板文档、数据库等。
终版解决方案:依据swagger接口响应机制,重写swagger接口响应数据
我们访问swagger-ui.html页面,看到的接口响应数据都是v2/api-docs
接口返回的,如下图
找到这个接口定义,如下图
这里有三个关键信息,已经用红框标出,含义是从缓存中取出Documentation,转换成Swagger,最后把Swagger序列化为Json响应。
我们可以改造这个接口,重新定义响应的Swagger,这样我们的接口信息便可以自由定义并且可以开放接口,动态控制接口响应的信息。即在最后把Swagger序列化为Json响应之前,对Swagger进行改造,具体的处理不再贴出,这里提出需要注意的点,原则上只需要重写Swagger的paths和definitions即可,想要更准确一些,也可以把tags等也重写,不过无伤大雅了。
// TODO 处理swagger
return new ResponseEntity<Json>(jsonSerializer.toJson(swagger), HttpStatus.OK);
新的需求
我们想要对自定义的接口信息进行分组,可以进行权限控制、分组查询等操作,仅仅靠上述操作是无法实现了,如何解决这个问题呢?见下一篇SpringBoot实现Swagger接口响应信息自定义(三)