www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]目錄前言官方文檔如何說?SpringBoot版本說明添加依賴springfox-boot-starter做了什么?擼起袖子就是干?定制一個(gè)基本的文檔示例文檔如何分組?如何添加授權(quán)信息?如何攜帶公共的請求參數(shù)?粗略是一個(gè)BUG總結(jié)前言最近頻繁被Swagger3.0刷屏,官方表示這是...

目錄

  • 前言
  • 官方文檔如何說?
  • Spring Boot版本說明
  • 添加依賴
  • springfox-boot-starter做了什么?
  • 擼起袖子就是干?
    • 定制一個(gè)基本的文檔示例
    • 文檔如何分組?
    • 如何添加授權(quán)信息?
    • 如何攜帶公共的請求參數(shù)?
  • 粗略是一個(gè)BUG
  • 總結(jié)

前言

最近頻繁被ge: none;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;">Swagger 3.0刷屏,官方表示這是一個(gè)突破性的變更,有很多的亮點(diǎn),我還真不太相信,今天來帶大家嘗嘗鮮,看看這碗湯到底鮮不鮮....

官方文檔如何說?

該項(xiàng)目開源在Github上,地址:https://github.com/springfox/springfox。

Swagger 3.0有何改動?官方文檔總結(jié)如下幾點(diǎn):

  1. 刪除了對springfox-swagger2的依賴
  2. 刪除所有@EnableSwagger2...注解
  3. 添加了springfox-boot-starter依賴項(xiàng)
  4. 移除了guava等第三方依賴
  5. 文檔訪問地址改變了,改成了http://ip:port/project/swagger-ui/index.html。
姑且看到這里,各位初始感覺如何?

Swagger3.0?天天刷屏,真的香嗎?
既然人家更新出來了,咱不能不捧場,下面就介紹下Spring Boot如何整合Swagger 3.0吧。

Spring Boot版本說明

作者使用Spring Boot的版本是2.3.5.RELEASE

添加依賴

Swagger 3.0已經(jīng)有了與Spring Boot整合的啟動器,只需要添加以下依賴:

??<dependency>
???????<groupId>io.springfoxgroupId>
???????<artifactId>springfox-boot-starterartifactId>
???????<version>3.0.0version>
??dependency>

springfox-boot-starter做了什么?

Swagger 3.0主推的一大特色就是這個(gè)啟動器,那么這個(gè)啟動器做了什么呢?

「記住」:啟動器的一切邏輯都在自動配置類中。

找到springfox-boot-starter的自動配置類,在/META-INF/spring.factories文件中,如下:

Swagger3.0?天天刷屏,真的香嗎?
從上圖可以知道,自動配置類就是OpenApiAutoConfiguration,源碼如下:

@Configuration
@EnableConfigurationProperties(SpringfoxConfigurationProperties.class)
@ConditionalOnProperty(value?
=?"springfox.documentation.enabled",?havingValue?=?"true",?matchIfMissing?=?true)
@Import({
????OpenApiDocumentationConfiguration.class,
????SpringDataRestConfiguration.class,
????BeanValidatorPluginsConfiguration.class,
????Swagger2DocumentationConfiguration.class,
????SwaggerUiWebFluxConfiguration.class,
????SwaggerUiWebMvcConfiguration.class
})
@AutoConfigureAfter(
{?WebMvcAutoConfiguration.class,?JacksonAutoConfiguration.class,
????HttpMessageConvertersAutoConfiguration.class,?RepositoryRestMvcAutoConfiguration.class?})
public?class?OpenApiAutoConfiguration?
{

}
敢情這個(gè)自動配置類啥也沒干,就光導(dǎo)入了幾個(gè)配置類(@Import)以及開啟了屬性配置(@EnableConfigurationProperties)。

Swagger3.0?天天刷屏,真的香嗎?
「重點(diǎn)」:記住OpenApiDocumentationConfiguration這個(gè)配置類,初步看來這是個(gè)BUG,本人也不想深入,里面的代碼寫的實(shí)在拙劣,注釋都不寫。

擼起袖子就是干?

說真的,還是和以前一樣,真的沒什么太大的改變,按照文檔的步驟一步步來。

定制一個(gè)基本的文檔示例

一切的東西還是需要配置類手動配置,說真的,我以為會在全局配置文件中自己配置就行了。哎,想多了。配置類如下:

@EnableOpenApi
@Configuration
@EnableConfigurationProperties(value?=?{SwaggerProperties.class})
public?class?SwaggerConfig?
{
??/**
?????*?配置屬性
?????*/

????@Autowired
????private?SwaggerProperties?properties;

????@Bean
????public?Docket?frontApi()?{
????????return?new?Docket(DocumentationType.OAS_30)
????????????????//是否開啟,根據(jù)環(huán)境配置
????????????????.enable(properties.getFront().getEnable())
????????????????.groupName(properties.getFront().getGroupName())
????????????????.apiInfo(frontApiInfo())
????????????????.select()
????????????????//指定掃描的包
????????????????.apis(RequestHandlerSelectors.basePackage(properties.getFront().getBasePackage()))
????????????????.paths(PathSelectors.any())
????????????????.build();
????}

????/**
?????*?前臺API信息
?????*/

????private?ApiInfo?frontApiInfo()?{
????????return?new?ApiInfoBuilder()
????????????????.title(properties.getFront().getTitle())
????????????????.description(properties.getFront().getDescription())
????????????????.version(properties.getFront().getVersion())
????????????????.contact(????//添加開發(fā)者的一些信息
????????????????????????new?Contact(properties.getFront().getContactName(),?properties.getFront().getContactUrl(),
????????????????????????????????properties.getFront().getContactEmail()))
????????????????.build();
????}
}
@EnableOpenApi這個(gè)注解文檔解釋如下:

Indicates that Swagger support should be enabled.
This should be applied to a Spring java config and should have an accompanying '@Configuration' annotation.
Loads all required beans defined in @see SpringSwaggerConfig
什么意思呢?大致意思就是「只有在配置類標(biāo)注了@EnableOpenApi這個(gè)注解才會生成Swagger文檔」。

@EnableConfigurationProperties這個(gè)注解使開啟自定義的屬性配置,這是作者自定義的Swagger配置。

總之還是和之前一樣配置,根據(jù)官方文檔要求,需要在配置類上加一個(gè)@EnableOpenApi注解。

文檔如何分組?

我們都知道,一個(gè)項(xiàng)目可能分為前臺后臺,APP端小程序端.....每個(gè)端的接口可能還相同,不可能全部放在一起吧,肯定是要區(qū)分開的。

因此,實(shí)際開發(fā)中文檔肯定是要分組的。

分組其實(shí)很簡單,SwaggerIOC中注入一個(gè)Docket即為一個(gè)組的文檔,其中有個(gè)groupName()方法指定分組的名稱。

因此只需要注入多個(gè)Docket指定不同的組名即可,當(dāng)然,這些文檔的標(biāo)題、描述、掃描的路徑都是可以不同定制的。

如下配置兩個(gè)Docket,分為前臺和后臺,配置類如下:

@EnableOpenApi
@Configuration
@EnableConfigurationProperties(value?=?{SwaggerProperties.class})
public?class?SwaggerConfig?
{
??/**
?????*?配置屬性
?????*/

????@Autowired
????private?SwaggerProperties?properties;

????@Bean
????public?Docket?frontApi()?{
????????return?new?Docket(DocumentationType.OAS_30)
????????????????//是否開啟,根據(jù)環(huán)境配置
????????????????.enable(properties.getFront().getEnable())
????????????????.groupName(properties.getFront().getGroupName())
????????????????.apiInfo(frontApiInfo())
????????????????.select()
????????????????//指定掃描的包
????????????????.apis(RequestHandlerSelectors.basePackage(properties.getFront().getBasePackage()))
????????????????.paths(PathSelectors.any())
????????????????.build();
????}

????/**
?????*?前臺API信息
?????*/

????private?ApiInfo?frontApiInfo()?{
????????return?new?ApiInfoBuilder()
????????????????.title(properties.getFront().getTitle())
????????????????.description(properties.getFront().getDescription())
????????????????.version(properties.getFront().getVersion())
????????????????.contact(????//添加開發(fā)者的一些信息
????????????????????????new?Contact(properties.getFront().getContactName(),?properties.getFront().getContactUrl(),
????????????????????????????????properties.getFront().getContactEmail()))
????????????????.build();
????}
????
????/**
?????*?后臺API
?????*/

????@Bean
????public?Docket?backApi()?{
????????return?new?Docket(DocumentationType.OAS_30)
????????????????//是否開啟,根據(jù)環(huán)境配置
????????????????.enable(properties.getBack().getEnable())
????????????????.groupName("后臺管理")
????????????????.apiInfo(backApiInfo())
????????????????.select()
????????????????.apis(RequestHandlerSelectors.basePackage(properties.getBack().getBasePackage()))
????????????????.paths(PathSelectors.any())
????????????????.build();
????}
????
????/**
?????*?后臺API信息
?????*/

????private?ApiInfo?backApiInfo()?{
????????return?new?ApiInfoBuilder()
????????????????.title(properties.getBack().getTitle())
????????????????.description(properties.getBack().getDescription())
????????????????.version(properties.getBack().getVersion())
????????????????.contact(????//添加開發(fā)者的一些信息
????????????????????????new?Contact(properties.getBack().getContactName(),?properties.getBack().getContactUrl(),
????????????????????????????????properties.getBack().getContactEmail()))
????????????????.build();
????}
????
}
屬性配置文件SwaggerProperties如下,分為前臺和后臺兩個(gè)不同屬性的配置:

/**
?*?swagger的屬性配置類
?*/

@ConfigurationProperties(prefix?=?"spring.swagger")
@Data
public?class?SwaggerProperties?{

????/**
?????*?前臺接口配置
?????*/

????private?SwaggerEntity?front;

????/**
?????*?后臺接口配置
?????*/

????private?SwaggerEntity?back;

????@Data
????public?static?class?SwaggerEntity?{
????????private?String?groupName;
????????private?String?basePackage;
????????private?String?title;
????????private?String?description;
????????private?String?contactName;
????????private?String?contactEmail;
????????private?String?contactUrl;
????????private?String?version;
????????private?Boolean?enable;
????}
}
此時(shí)的文檔截圖如下,可以看到有了兩個(gè)不同的分組:

Swagger3.0?天天刷屏,真的香嗎?

如何添加授權(quán)信息?

現(xiàn)在項(xiàng)目API肯定都需要權(quán)限認(rèn)證,否則不能訪問,比如請求攜帶一個(gè)TOKEN

在Swagger中也是可以配置認(rèn)證信息,這樣在每次請求將會默認(rèn)攜帶上。

Docket中有如下兩個(gè)方法指定授權(quán)信息,分別是securitySchemes()securityContexts()。在配置類中的配置如下,在構(gòu)建Docket的時(shí)候設(shè)置進(jìn)去即可:


????@Bean
????public?Docket?frontApi()?{
????????RequestParameter?parameter?=?new?RequestParameterBuilder()
????????????????.name("platform")
????????????????.description("請求頭")
????????????????.in(ParameterType.HEADER)
????????????????.required(true)
????????????????.build();
????????List?parameters?=?Collections.singletonList(parameter);
????????return?new?Docket(DocumentationType.OAS_30)
????????????????//是否開啟,根據(jù)環(huán)境配置
????????????????.enable(properties.getFront().getEnable())
????????????????.groupName(properties.getFront().getGroupName())
????????????????.apiInfo(frontApiInfo())
????????????????.select()
????????????????//指定掃描的包
????????????????.apis(RequestHandlerSelectors.basePackage(properties.getFront().getBasePackage()))
????????????????.paths(PathSelectors.any())
????????????????.build()
????????????????.securitySchemes(securitySchemes())
????????????????.securityContexts(securityContexts());
????}

????/**
?????*?設(shè)置授權(quán)信息
?????*/

????private?List?securitySchemes()?{
????????ApiKey?apiKey?=?new?ApiKey("BASE_TOKEN",?"token",?In.HEADER.toValue());
????????return?Collections.singletonList(apiKey);
????}

????/**
?????*?授權(quán)信息全局應(yīng)用
?????*/

????private?List?securityContexts()?{
????????return?Collections.singletonList(
????????????????SecurityContext.builder()
????????????????????????.securityReferences(Collections.singletonList(new?SecurityReference("BASE_TOKEN",?new?AuthorizationScope[]{new?AuthorizationScope("global",?"")})))
????????????????????????.build()
????????);
????}
以上配置成功后,在Swagger文檔的頁面中將會有Authorize按鈕,只需要將請求頭添加進(jìn)去即可。如下圖:

Swagger3.0?天天刷屏,真的香嗎?

如何攜帶公共的請求參數(shù)?

不同的架構(gòu)可能發(fā)請求的時(shí)候除了攜帶TOKEN,還會攜帶不同的參數(shù),比如請求的平臺,版本等等,這些每個(gè)請求都要攜帶的參數(shù)稱之為公共參數(shù)。

那么如何在Swagger中定義公共的參數(shù)呢?比如在請求頭中攜帶。

Docket中的方法globalRequestParameters()可以設(shè)置公共的請求參數(shù),接收的參數(shù)是一個(gè)List,因此只需要構(gòu)建一個(gè)RequestParameter集合即可,如下:

@Bean
public?Docket?frontApi()?{
???//構(gòu)建一個(gè)公共請求參數(shù)platform,放在在header
???RequestParameter?parameter?=?new?RequestParameterBuilder()
??????//參數(shù)名稱
??????.name("platform")
??????//描述
??????.description("請求的平臺")
??????//放在header中
??????.in(ParameterType.HEADER)
??????//是否必傳
??????.required(true)
??????.build();
??????//構(gòu)建一個(gè)請求參數(shù)集合
??????List?parameters?=?Collections.singletonList(parameter);
????????return?new?Docket(DocumentationType.OAS_30)
????????????????.....
????????????????.build()
????????????????.globalRequestParameters(parameters);
????}
以上配置完成,將會在每個(gè)接口中看到一個(gè)請求頭,如下圖:

Swagger3.0?天天刷屏,真的香嗎?

粗略是一個(gè)BUG

作者在介紹自動配置類的時(shí)候提到了一嘴,現(xiàn)在來簡單分析下。

OpenApiAutoConfiguration這個(gè)自動配置類中已經(jīng)導(dǎo)入OpenApiDocumentationConfiguration這個(gè)配置類,如下一段代碼:

@Import({
????OpenApiDocumentationConfiguration.class,
????......
})
@EnableOpenApi的源碼如下:

@Retention(value?=?java.lang.annotation.RetentionPolicy.RUNTIME)
@Target(value?=?{java.lang.annotation.ElementType.TYPE})
@Documented
@Import(OpenApiDocumentationConfiguration.class)
public?@interface?EnableOpenApi?
{
}
從源碼可以看出:@EnableOpenApi這個(gè)注解的作用就是導(dǎo)入OpenApiDocumentationConfiguration這個(gè)配置類,納尼???

既然已經(jīng)在自動配置類OpenApiAutoConfiguration導(dǎo)入了,那么無論需不需要在配置類上標(biāo)注@EnableOpenApi注解不都會開啟Swagger支持嗎?

「測試一下」:不在配置類上標(biāo)注@EnableOpenApi這個(gè)注解,看看是否Swagger運(yùn)行正常。結(jié)果在意料之中,還是能夠正常運(yùn)行。

「總結(jié)」:作者只是大致分析了下,這可能是個(gè)BUG亦或是后續(xù)有其他的目的,至于結(jié)果如此,不想驗(yàn)證了,沒什么意思。

總結(jié)

這篇文章也是嘗了個(gè)鮮,個(gè)人感覺不太香,有點(diǎn)失望。你喜歡嗎?


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉