关系经济人类预测化学自然
投稿投诉
自然科学
知识物理
化学生物
地理解释
预测理解
本质社会
人类现象
行为研究
经济政治
心理结构
关系指导
人文遗产

Java中让Swagger产出符合诉求的文档,按需决定显示或

7月7日 发如雪投稿
  swagger作为一个被广泛使用的在线接口文档辅助工具,上手会用很容易,但想用好却还是需要一定功夫的。所以呢,本篇文档就和大家一起来聊一聊如何用好swagger,让其真正的成为我们项目交付过程中的神兵利器。更改接口文档总标题与描述
  默认的情况下,Swagger的界面整个文档的名称以及描述内容都是通用值,这会让人拿到文档之后比较困惑,无法知晓这是哪个项目哪个系统哪个服务提供的接口,也不知道接口是哪个团队负责,哪位开发人员维护的。
  比如下面这样:
  为了体现出接口文档的专业性,让人更容易知晓此接口文档所属系统、对应版本、维护团队等信息,我们可以在代码中根据需要自定义相关的内容。
  比如:BeanpublicDocketcreateRestApi(){ApiInfoapiInfonewApiInfoBuilder()。title(资源管理系统接口文档)。description(资源管理模块对外供APPWEB端调用的接口详细文档描述)。version(v1。0。0)。contact(newContact(架构悟道,https:juejin。cnuser1028798616709294,veezeanoutlook。com))。termsOfServiceUrl(https:juejin。cnuser1028798616709294)。license(ApacheLicense)。licenseUrl(http:xxx)。build();returnnewDocket(DocumentationType。SWAGGER2)。apiInfo(apiInfo)。select()。build();}
  重新启动并查看界面,可以发现界面上相关内容已经变更为我们自定义的内容了,是不是比改动前显得更加明晰与专业了?
  上述swagger中支持自定义的描述性的字段信息,梳理如下:
  字段
  含义描述
  title
  接口文档的文档标题
  description
  接口文档的详细整体描述说明
  version
  接口文档对应的版本信息
  termsOfServiceUrl
  此接口文档的提供团队对应的团队url地址
  contact
  负责此部分接口的联系人信息,包含姓名、邮箱、主页url地址等
  license
  指定接口所遵循的License协议版本
  licenseUrl
  此接口所遵循的License协议对应的详细介绍url地址按需显示隐藏相关接口内容
  手动编写接口文档的时候,我们可以根据实际情况灵活的去控制需要写入到文档中的接口内容、以及接口的请求响应体中的字段信息因为并不是系统中提供的所有的接口都需要体现在接口文档中暴露给调用方去知晓的,比如有一些系统状态监控类的接口,只需要内部使用即可。
  对于Swagger而言,生成接口文档的时候,默认是扫描所有的Controller中的全部接口方法全部显示到文档中,但其也贴心地考虑到了实际应用中的这种按需隐藏或者展示接口内容的诉求,并提供了多种不同的方式来支持。
  下面一起来看下。针对单个接口进行隐藏
  在单个接口方法的上方添加ApiOperation注解说明,并指定hiddentrue即可将该接口从swagger界面能上隐藏:GetMapping(test)ApiOperation(value内部测试接口,hiddentrue)publicStringtest(){returnOK;}
  启动进程,查看Swagger界面,发现该接口没有出现在界面上:
  隐藏整个Controller类中的接口
  如果整个Controller类下面所有的接口都需要隐藏,则可以在Conntroller类上添加上ApiIgnore注解可以了。RestControllerRequestMapping(test)ApiIgnorepublicclassTestController{。。。ignore。。。}
  改动后重启进程,再打开swagger界面,发现TestController整个类的接口都没有显示。
  这里补充一句,因为用于描述Controller类的接口含义的注解Api中也有个hidden属性,而且看其源码注释说明,如果设置hiddentrue,应该也是将该Controller类整体隐藏。但是实际上测试发现并没有生效,这个实际使用的时候要小心这一点(基于swagger2。7。0版本试验,不确定是否为BUG)。Target(ElementType。TYPE)Retention(RetentionPolicy。RUNTIME)InheritedpublicinterfaceApi{Hidestheoperationsunderthisresource。returntrueiftheapishouldbehiddenfromtheswaggerdocumentationbooleanhidden()}仅显示指定package路径下的接口
  我们的项目里面经常会依赖或者引用一些三方jar包,而这些三方jar中有的时候也会提供一些接口,也会出现在我们的接口文档中,这样就会显得接口文档中存在很多不确定的内容。
  比如:
  因为这部分逻辑并非业务代码中提供的,所以我们没法按照上面的方式,修改源码添加hiddentrue的方式来控制其不显示。这个时候,就需要按照package进行白名单控制的能力了。swagger还支持根据给定的basePackage以及paths进行组合控制,仅显示给定包下指定路径下的接口。BeanpublicDocketcreateRestApi(){ApiInfoapiInfonewApiInfoBuilder()。title(资源管理系统接口文档)。description(资源管理模块对外供APPWEB端调用的接口详细文档描述)。version(v1。0。0)。build();ApiSelectorBuilderselectorBuilder(newDocket(DocumentationType。SWAGGER2))。apiInfo(apiInfo)。select();selectorBuilder。apis(RequestHandlerSelectors。basePackage(com。jiagouwudao。resmanage));selectorBuilder。paths(PathSelectors。any());returnselectorBuilder。build();}
  这样就可以保证出现在接口文档里面的都是我们自己定义的接口了。重新启动并刷新界面,会发现,只有指定package目录下的Controller接口显示在swagger界面上了。
  隐藏响应中不愿暴露的属性
  在项目开发过程中,如果我们的代码没有做强制的VO、DO隔断,出于减少编码量考虑,可能会使用同一个对象进行内部处理以及外部交互。比如:
  定义一个OperateLog对象,为数据库中TOPERATELOG表所对应的实体类,用于记录每个用户的操作行为;同时也作为recordOperateLog接口的请求Body体,用于传递需要记录的用户操作信息。
  在上面的例子中:作为数据表实体类进行逻辑处理的时候,需要用到唯一主键id信息作为recordOperateLog接口的请求Body体时,调用方是不需要指定这条记录的ID值的(ID值会在存储到DB的时候自动由DB生成唯一自增主键)
  这种场景下,我们就希望提供出去的接口文档中,在对recordOperateLog接口的请求body体中字段说明的时候,就不要体现出id字段,避免让调用方产生疑惑,不知道id调用的时候应该如何赋值。我们可以通过在指定字段上添加ApiModelProperty注解并指定hiddentrue来将其从接口文档中隐藏掉。
  比如:DataApiModel(操作记录信息)publicclassOperateLog{ApiModelProperty(value记录唯一ID,无实际意义,hiddentrue)ApiModelProperty(操作类型,取值说明:1,新增;2,更新;3,删除;4,查询)privateintoperateTApiModelProperty(操作用户)privateSApiModelProperty(value操作详情)privateS}
  则界面中的接口文档不会显示id的有关信息(注意:仅接口文档中不体现,不会影响具体请求或者响应中此字段的实际值)。
  关闭生产环境的swagger
  考虑到生产环境的安全性,对于一些比较重要的系统,我们一般不太愿意将生产环境的接口文档暴露出来,避免对系统的运行埋下隐患。
  在SpringBoot项目中,我们会为不同的环境提供不同的配置文件,然后在启动的时候使用spring。active。profile来指定加载哪一份配置。
  如果需要使Swagger可以被访问,我们可以通过代码中添加EnableSwagger2注解的方式来实现。若限制仅在开发或测试环境上允许swagger访问而生产环境不允许打开,则只需要让这个添加了EnableSwagger2注解的类根据当前的运行环境来决定是否加载就可以了。借助SpringBoot提供的Profile注解,我们可以这样来实现:ConfigurationEnableSwagger2Profile({DEV,TEST})publicclassSwaggerConfig{}
  这样,就可以让SwaggerConfig类在profilePROD的时候不会被加载,也就不会开启swagger的开关。使用spring。active。profilePROD启动进程,尝试访问swagger界面,会发现无法打开:
  给Swagger换个皮肤
  默认的swagger界面所有内容都罗列居中显示,然后需要一层层的展开去,操作上面不太方便,整体界面风格也不太符合一个文档的样子。为了提升使用体验,可以借助开源的knife4j框架来让swagger变得更加好用。
  使用方式很简单,在已有的swagger依赖的基础上,在pom。xml中新增如下引用依赖:dependencygroupIdcom。github。xiaoymingroupIdknife4jspringuiartifactIdversion2。0。4versiondependency
  启动进程后,访问doc。html页面,比如http:127。0。0。1:8088doc。html,可以发现一个更加符合接口文档体验的新的界面:
  当然,这里我们使用了knife4j最简单的一个换肤的特性,而作为一款优秀的开源工具,knife4j所提供的能力远不止这些,有兴趣的可以点击此处详细了解一下。总结
  好啦,关于如何补全Swagger接口的描述内容、如何自主决定某些内容的显示与隐藏等相关的内容,这里就给大家分享到这里啦。关于本篇内容你有什么自己的想法或独到见解么?
投诉 评论 转载

突发意外!赵心童确诊,斯诺克重回中国,竟然没有丁俊晖万众瞩目的斯诺克香港大师赛拉开序幕,世界台联只邀请了世界排名前6的球员,以及本土球员傅家俊和吴安仪参赛,现如今8位球员已经抵达赛场,并且已经面向媒体进行了宣传,然而让球迷惊讶的……39岁老将回击质疑,史蒂芬汤普森我会继续战斗下去!今年39岁的史蒂芬汤普森,自打15岁被父亲第一次带到空手道比赛现场算起,格斗几乎占据了他生命的大半时光。他的职业生涯早期是一位保持不败战绩的踢拳选手,完成了57场全胜战绩……Java中让Swagger产出符合诉求的文档,按需决定显示或swagger作为一个被广泛使用的在线接口文档辅助工具,上手会用很容易,但想用好却还是需要一定功夫的。所以呢,本篇文档就和大家一起来聊一聊如何用好swagger,让其真正的成为……辽篮50分恶霸多次出手伤人,篮协迟迟未处理,到底是在畏惧什么近日,篮协公布了一则处罚消息,上海队外援布莱德索和北控队球员禁赛罚款,这对于上海队来说损失是非常大的,因为季后赛即将开打,少了一名外援,球队的轮换有了不小的压力。不少球迷……每个人都有自己的生活一个人只有在适合自己的环境里,待在适合的人身边,才能最大限度的激发自己的潜力,生活的舒服。Onlybystayingbytherightpersonintheenviro……ironSourceLuna中国负责人CeciliaXu聚焦大会召集了游戏行业出海精英齐聚线下,共襄出海盛举。期间,CXO闭门研讨会上,ironSourceLuna中国负责人CeciliaXu聚焦当前海外推广面临瓶颈,对比SearchA……全球第一大电视代工厂力压TCL富士康京东方,出货1357万台2022年全球电视终端市场继续呈下滑趋势,出货量仅有2。02亿台,创下近十年来的新低。但代工市场出货保持相对稳定,根据洛图科技发布的报告显示,去年全球电视代工市场(含长虹、创维……人到中年帅翻天的男星,我只服这6位,年轻时一般,快40岁才变屠洪刚在歌曲《霸王别姬》里唱道:人世间有百媚千红,而有人早早绽放花期,也有人等到一定岁数才拥有自己的春天。出名不一定要趁早,赢在人生下半场,或许是另外一个成功,比如52岁……2022年世界杯观赛必知!3分钟速览18个冷知识,成为足球行2022年卡塔尔世界杯倒计时只剩5天,绿茵雪球整理出【18条世界杯大数据冷知识】,助你一文通览世界杯。1。【世界杯】世界杯是由国际足联(FIFA)举办的国家队A级赛事,采……人生,浓缩成三句话(精辟)来源于基层干部2022121512:59发表于浙江来源文史阅读第一句话你的责任就是你的方向,你的经历就是你的资本,你的性格就是你的命运。第二句话复……有一种成长,是接受了自己的平凡昨晚的《夜读》,是关于人生的各个年龄阶段,不少读者也在留言里提到自己过完年长大一岁的感受,有人欣然生长,有人不想长大,也有人慨然一问:长大的意义是什么?时光给每个人留下痕……10位当红女星卸妆景甜王丽坤无变化,许晴,张韶涵,杨颖显苍老10位当红女星卸妆:景甜王丽坤无变化,许晴,张韶涵,杨颖显苍老许晴许晴固然是圈内妥妥的冻龄女神,但卸妆后的她还是有种顿时老十岁的感脚。不得不承认即使对明星来说,岁月……
预示有凶祸发生的梦境社保缴费迎来新调整原先补缴方案取消,断缴后处理方式各异谭雅玲如何看待人民币进入6。3元时代碳中和首个10倍股诞生,机构却跑了!3月24日A股资讯解读刚刚,沪深两市上市公司发布最新公告(12月21号)谷雨下雨好还是出太阳好特斯拉中国明年将生产万辆汽车含万台碎花连衣裙配什么鞋子好看款碎花裙搭配示范轻松穿出宝宝享受日光浴掌握正确方法是关键如何应对倦怠的感觉矿业公司安全部工作总结顾炎武著书立说
员工违法违约解除劳动合同可以吗桂花凉粉的做法心肌炎患者调理好身体,首先要学会这6招利润大增超50,这家千亿国产半导体设备龙头稳了?热传聚热点网 那个影响了我的人三一摘双料冠军汉马宇通争前二11月新能源重卡大涨668再爆纪割草游戏割草加上一笔连,休闲解压赛神仙个小技巧让白领远离职业病骄傲的犀牛天气冷,心也变冷了作文550字热文聚热点网 夜来香可以防蟑螂吗“上海老字号”的翻新之路

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找菏泽德阳山西湖州宝鸡上海茂名内江三亚信阳长春北海西安安徽黄石烟台沧州湛江肇庆鹤壁六安韶关成都钦州