应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

SpringBoot进阶详解SpringBoot中使用Swa

  在上篇文章中我们介绍了SpringBoot整合Swagger3。0的一些基础用法,这篇文章中我们来深入学习一下Swagger3。0还有其他高级用法。
  在日常的开发中,为了减少工作量,我们会遇到一种情况,就是将前端的接口与后端的接口编写到同一个代码中,这样也提高了代码的复用率,减少了重复开发代码的工作量。这个时候我们就需要将接口文档也进行拆分。分为前端接口和后端接口两个部分。
  在Swagger3。0中如何进行接口分组呢?Swagger3。0接口分组操作
  通过之前的例子我们知道,我们往容器中注入一个Docket就是注入了一个文档,其中我们设置了groupName的分组名称。要想注入多个文档,意思就是需要往容器中注入多个Docket。既然是这样,我们就需要修改之前的Swagger的配置文件,将其改为如下的代码。EnableOpenApiConfigurationEnableConfigurationProperties(value{SwaggerProperties。class})publicclassSwagger3Config{AutowiredprivateSwaggerPropertiesswaggerProperties;BeanpublicDocketfrontApi(){returnnewDocket(DocumentationType。OAS30)是否开启,根据环境配置。enable(swaggerProperties。getFront()。getEnable())。groupName(swaggerProperties。getFront()。getGroupName())。apiInfo(frontApiInfo())。select()。apis(RequestHandlerSelectors。basePackage(swaggerProperties。getFront()。getBasePackege()))。paths(PathSelectors。any())。build();}前台API信息privateApiInfofrontApiInfo(){returnnewApiInfoBuilder()。title(swaggerProperties。getFront()。getTitle())。description(swaggerProperties。getFront()。getDescription())。version(swaggerProperties。getFront()。getVersion())。contact(添加开发者信息newContact(swaggerProperties。getFront()。getContactName(),swaggerProperties。getFront()。getContactUrl(),swaggerProperties。getFront()。getContactEmail()))。build();}BeanpublicDocketbackApi(){returnnewDocket(DocumentationType。OAS30)是否开启,根据环境配置。enable(swaggerProperties。getBack()。getEnable())。groupName(swaggerProperties。getBack()。getGroupName())。apiInfo(backApiInfo())。select()。apis(RequestHandlerSelectors。basePackage(swaggerProperties。getBack()。getBasePackege()))。paths(PathSelectors。any())。build();}前台API信息privateApiInfobackApiInfo(){returnnewApiInfoBuilder()。title(swaggerProperties。getBack()。getTitle())。description(swaggerProperties。getBack()。getDescription())。version(swaggerProperties。getBack()。getVersion())。contact(添加开发者信息newContact(swaggerProperties。getBack()。getContactName(),swaggerProperties。getBack()。getContactUrl(),swaggerProperties。getBack()。getContactEmail()))。build();}}
  我们会看到在这个配置类中注入了两个Docket,分别代表前端的接口和后端的接口,那么在配置文件中如何进行配置呢?
  首先我们先来看一下其配置类,代码如下DataConfigurationProperties(prefixspring。swagger3)publicclassSwaggerProperties{privateSwaggerEntityfront;privateSwaggerEntityback;DatapublicstaticclassSwaggerEntity{privateStringgroupName;privateStringbasePackege;privateStringtitle;privateStringdescription;privateStringcontactName;privateStringcontactEmail;privateStringcontactUrl;privateStringversion;privateBooleanenable;}}
  全局配置类spring:swagger3:front:enable:truegroupName:前端接口basePackege:com。example。demo。controller。apititle:前端测试接口description:前端测试SpringBoot整合Swagger3。0contactName:nihuicontactEmail:18202504057163。comcontactUrl:https:blog。csdn。netnihui123version:0。0。1back:enable:truegroupName:后端接口basePackege:com。example。demo。controller。webtitle:后端测试接口description:后端测试SpringBoot整合Swagger3。0contactName:nihuicontactEmail:18202504057163。comcontactUrl:https:blog。csdn。netnihui123version:0。0。1mvc:pathmatch:matchingstrategy:antpathmatcher
  通过上面的配置完成配置之后,就会看到在接口页面会有两个分组,一个是前端接口、一个是后端接口分组。
  添加授权认证信息
  在很多对外提供服务的API接口中,都会有一个授权认证的操作,否则这些接口是无法进行调用的。例如在一般的情况下,会在接口中包含一个TOKEN参数。
  那么在Swagger3。0中如何对这个认证信息进行配置,这样在每次请求的时候都会带着这个参数进行请求,这样就避免了我们在测试过程中,每次都需要添加这个信息的麻烦。
  要完成授权信息的添加,我们需要在Docket方法中添加如下的内容ConfigurationpublicclassBaseSwagger3Config{AutowiredprivateBaseSwagger3Propertiesproperties;BeanpublicDocketbaseApi(){returnnewDocket(DocumentationType。OAS30)是否开启,根据环境配置。enable(properties。getEnable())。groupName(properties。getGroupName())。apiInfo(frontApiInfo())。select()。apis(RequestHandlerSelectors。basePackage(properties。getBasePackege()))。paths(PathSelectors。any())。build()。securitySchemes(securitySchemes())。securityContexts(securityContexts());}privateListSecuritySchemesecuritySchemes(){ApiKeyapiKeynewApiKey(TOKEN,token,In。HEADER。toValue());returnCollections。singletonList(apiKey);}privateListSecurityContextsecurityContexts(){returnCollections。singletonList(SecurityContext。builder()。securityReferences(Collections。singletonList(newSecurityReference(TOKEN,newAuthorizationScope〔〕{newAuthorizationScope(global,)})))。build());}前台API信息privateApiInfofrontApiInfo(){returnnewApiInfoBuilder()。title(properties。getTitle())。description(properties。getDescription())。version(properties。getVersion())。contact(添加开发者信息newContact(properties。getContactName(),properties。getContactUrl(),properties。getContactEmail()))。build();}}
  完成上述配置之后,会看到在接口页面上会多出一个认证的按钮。通过这个认证的按钮我们可以设置对应的参数值
  添加公共参数
  在不同的平台使用的时候,除了携带请求Token之外还会有一些用户进行用户分析,大数据分析的参数被传到请求中。那么如何在Swagger3。0中去定义这些公共参数呢?这个时候我们需要在配置代码中添加如下的内容。ConfigurationpublicclassBaseSwagger3Config{AutowiredprivateBaseSwagger3Propertiesproperties;BeanpublicDocketbaseApi(){RequestParameterrequestParameternewRequestParameterBuilder()。name(clientType)。description(客户端类型)。in(ParameterType。HEADER)。required(true)。build();创建一个请求参数集合ListRequestParameterrequestParameterListCollections。singletonList(requestParameter);returnnewDocket(DocumentationType。OAS30)是否开启,根据环境配置。enable(properties。getEnable())。groupName(properties。getGroupName())。apiInfo(frontApiInfo())。select()。apis(RequestHandlerSelectors。basePackage(properties。getBasePackege()))。paths(PathSelectors。any())。build()。globalRequestParameters(requestParameterList)。securitySchemes(securitySchemes())。securityContexts(securityContexts());}privateListSecuritySchemesecuritySchemes(){ApiKeyapiKeynewApiKey(TOKEN,token,In。HEADER。toValue());returnCollections。singletonList(apiKey);}privateListSecurityContextsecurityContexts(){returnCollections。singletonList(SecurityContext。builder()。securityReferences(Collections。singletonList(newSecurityReference(TOKEN,newAuthorizationScope〔〕{newAuthorizationScope(global,)})))。build());}前台API信息privateApiInfofrontApiInfo(){returnnewApiInfoBuilder()。title(properties。getTitle())。description(properties。getDescription())。version(properties。getVersion())。contact(添加开发者信息newContact(properties。getContactName(),properties。getContactUrl(),properties。getContactEmail()))。build();}}
  会看到上述代码中通过,RequestParameter定义了一个公共的参数,并且将其放入到了一个参数集合中,通过Docket的。globalRequestParameters(requestParameterList)方法将其添加到Swagger3。0文档中。然后运行项目会看到在接口中就会携带这对应的参数出现,并且这个参数是全局的,也就是说每个接口中都需要有这一个参数。
  到这里,Swagger的相关内容就告一段落了。细心的读者会发现,在前面我们添加分组配置的时候在配置类上添加了好多的注解,但是在我们演示认证信息与全局参数的时候,配置类中只是简单的添加了一个Configuration注解。这是为什么呢?下面我们就来探索一下源码。OpenApiAutoConfiguration源码
  会看到在这段源码中,好像什么功能都没实现,但是它确完成了Swagger3。0大多数的配置,而对于EnableOpenApi注解来讲。ConfigurationEnableConfigurationProperties(SpringfoxConfigurationProperties。class)ConditionalOnProperty(valuespringfox。documentation。enabled,havingValuetrue,matchIfMissingtrue)Import({OpenApiDocumentationConfiguration。class,SpringDataRestConfiguration。class,BeanValidatorPluginsConfiguration。class,Swagger2DocumentationConfiguration。class,SwaggerUiWebFluxConfiguration。class,SwaggerUiWebMvcConfiguration。class})AutoConfigureAfter({WebMvcAutoConfiguration。class,JacksonAutoConfiguration。class,HttpMessageConvertersAutoConfiguration。class,RepositoryRestMvcAutoConfiguration。class})publicclassOpenApiAutoConfiguration{}EnableOpenApi注解
  对于EnableOpenApi注解来讲其关键的代码就是Import(OpenApiDocumentationConfiguration。class)引入的还是这个类。Retention(valuejava。lang。annotation。RetentionPolicy。RUNTIME)Target(value{java。lang。annotation。ElementType。TYPE})DocumentedImport(OpenApiDocumentationConfiguration。class)publicinterfaceEnableOpenApi{}
  这里我们会发现为什么在没有EnableOpenApi注解的时候也会生效呢?那就是用到了我们SpringBoot自动配置的原理了。关于自动配置的原理在后续的分析中我们来进行讲解,这里就先不做过多说明。提示大家的就是找到如下图中的代码就可以理解自动配置的原理
  总结
  通过上面的内容我们了解了Swagger3。0的一些扩展性的用法,当然Swagger的用法远远不止这些,但是这些内容已经可以支持在我们日常开发中的一些工作。希望大家多多关注,笔者会为大家带来更多精彩干活

中医经络任脉一、概述掌管女性妊养的总管。二、循行任脉,起于小腹内,下出于会阴部,向前上行于阴毛部,循腹沿前正中线上行,经关元等穴至咽喉,再上行环绕口唇,经面部进入目眶下,……6种补钙补锌宝宝长高食谱合集,要好好吃饭哦头号周刊美食食谱宝宝食谱亲爱的宝妈们不知道给宝宝做什么有营养又好吃呢,今天我把现成的食谱做好了!快来给宝宝做吧芝士紫薯球紫薯蒸熟压成泥,取适量紫薯泥整理成饼状……将油门当刹车,高速4连撞!单踏板模式究竟是不是反人类设计?此前,一位车主在网上爆料,表明自己在机场高速路上正常行驶,但自己所驾驶的特斯拉Model3在毫无征兆的情况下加速到170kmh,随后连撞4辆车,有惊无险,车主性命没有受到伤害,……如果再买电视机,一定坚持7不买原则,都是过来人的经验教训电视机是家家户户的必备电器之一,它承载了我们从小到大的许多乐趣。随着科技水平和我们生活水平的提高,对电视机的要求也越来越高。从最开始的黑白电视,到彩电,再到液晶电视,现在还有4……正式官宣!CBA名将出山执教,担任北控三人男篮主帅让人期待三人超级联赛已经完成了过渡,新赛季开始之前,将会有多支CBA球队报名参加,包括广州龙狮、上海男篮等球队都已经组建三人篮球队。北控男篮也正式宣布,他们成功组建三人篮球队,由青年队……父母这样做,其实对孩子是一种无形的伤害管教的艺术就在于:爱他,就是关心他照顾他,扶持他;爱他就是不过分关心,不过分照顾,不过分扶持;爱他就是帮助他独立,训练他的自主能力。管教孩子其实是一门艺术,多一分是溺爱,……三位名帅拒绝北京首钢!解立彬不愿接手下赛季前景不乐观当山东男篮官宣王晗出任主帅之后,北京首钢选帅目标又少了一位,一转眼雅尼斯下课已经快两个月了,CBA目前也只有北京首钢主帅没有确定。北京首钢的主教练是谁,这似乎成为了CBA休赛期……英公赛资格赛前2日中国9人全胜丁俊晖破百赢首胜O莱恩斯24丁俊晖北京时间8月11日凌晨,2022斯诺克英国公开赛资格赛第2日战罢。4位出战的中国选手全部胜出:丁俊晖轰出1杆破百,大比分42战胜O莱恩斯,迎个人赛季首胜……冯坤一家三口亮相男排颁奖典礼!戴卿尧剃胡子领奖,吴胜儿子现身中国男排横扫日本重夺亚洲冠军。在颁奖典礼上,队长于垚辰接过了奖杯,队员们也都聚在一起纷纷合影留念。虽然有些球员没有报名参加此次比赛,但他们都随队来到了泰国,并感受到了夺冠的喜悦……中科原动力成为全球首个将L4级智能农机实现大规模集群商业化应中科原动力供图近日,海淀创业园在孵企业中科原动力先进的无人化集群作业在中国农业巨型航母北大荒集团赵光农场大显身手,这是全国首例大规模无人农机集群实施大豆中耕管理作业,标志……千古秘境世外桃源人间仙境鹿院坪很值得一游北有白鹿塬,南有鹿院坪。这二个神秘的地方都与神奇的鹿有关。白鹿塬在西安东郊,因一只白鹿而得名,是一块风水宝地。而鹿院坪坐落在恩施板桥镇新田村的深山峡谷之中,是一处世外桃源、人间……初春不费力的穿搭示范,原来简约舒服的搭配才是最耐看的喜欢简单的生活,喜欢简单的穿搭,喜欢做个简单的姑娘,摆脱了冬天的束缚,春天到了,可以换上轻盈自在的春装了,还是喜欢简单舒服的休闲风格,不做作,不浮夸,让自己变得轻松起来。……
辽宁锦州八景是哪八景辽宁锦州八景是什么辽宁锦州市风景秀丽,在锦州的名胜风景也有很多,锦州过去的确有八景一说,但随着葫芦岛升格市地级市之后,划归于葫芦岛市。八景是明朝的时候总结的,有八个景点。……走了马蓉来了冯清,新女友黑料不断,王宝强到底喜欢她什么?自从爆出新女友冯清之后,就时常传出冯清与王宝强两人做了婚前财产公正,准备领证结婚的消息。可正式官宣恋情都没有的二人,这就要结婚的节奏了?而在爆出两人在一起后,前妻马……内娱男明星可以全体向吴磊白敬亭他们学习吗?广大男明星,能不能想吴磊一样卷起来,练一下臂力。最近《星汉灿烂》正在热播中,广大网友都这磕吴磊扮演的角色凌不疑和赵露思演的程少商的CP,影视有好多个画面吴磊都轻轻松松一把……新能源车有4个弊端,看完你还想买吗?推荐语:近年来,新能源汽车行业不断受到国家重视,随着相关鼓励政策的出台,极大推动中国新能源汽车行业的发展。官方数据显示:2021年中国新能源汽车销量为352万辆,中国汽车……风靡世界的大富翁,发明的初衷是为了反对垄断大富翁发明的初衷却并不是鼓励人们成为资本寡头,恰恰相反是为了反对当时的大垄断者。大宇资讯最近真的是动作连连,在发布了《仙剑客栈》的续作《仙剑客栈2》后,又在Steam炒了……A股机器人才是未来!未来有望翻倍的5大细分龙头股(附名单)机器人的市场规模在下游需求和zc扶持的带动作用下,中国已经是并将继续保持全球第一大机器人市场的地位。20192021年国内工业机器人出货量从14。9万台增长至25。6万台……上半年中国智能手机销量出炉荣耀暴涨118。3苹果第三【手机中国新闻】2022年手机似乎有些卖不动了,今年第二季度的手机市场更是惨淡,销量未及2016年第四季度创下的历史峰值销量的一半。7月28日,CINNOResearch发布的……井冈山午后。小睡起来,用新买的青花瓷,泡一杯刚刚网购的龙井。淡淡的轻烟,从茶杯里升腾缭绕飘渺的惬意,并在空气中弥漫出优雅的茶香。窗外,太阳明丽灿烂,充满详和氛围。虽是八月盛夏,却没有……服装箱包平台招商发展中服装箱包平台以一站式商务的创新服务理念,实现多种形式的信息交互,提供全面的行业信息和市场信息,先进科学技术为主导,专业性服务为一体的新一代电子商务专业平台。以便捷的浏览方式,强……达科为IPO上半年卖出2145多万支核酸采样管(文张志峰编辑马媛媛)在排队约1年后,科研试剂厂商深圳市达科为生物技术股份有限公司(下称达科为)最终成功过会。10月中旬,达科为正式向证监会提交招股说明书,冲刺深交所IP……美甲分享丨雨后天晴今日宜做美甲一场秋雨一场寒日子忽然缓慢而悠长街边卖糖炒栗子的小店开始排起长队秋天的气息我们也要做秋天的美甲啦01hr冰透雾霾蓝渐变延长美甲清冷感很足……聚会夜跑看日出白云山夜游成年轻人新宠你见过凌晨时分的白云山吗?对于很多广州年轻人来说,凌晨时分的白云山并不陌生。随着白云山环境越来越靓,配套设施越来越完善,如今每晚都有一批年轻人涌入白云山:他们有的在山间夜跑,有……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网