日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

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

目錄

  • 前言
  • 官方文檔如何說?
  • Spring Boot版本說明
  • 添加依賴
  • springfox-boot-starter做了什么?
  • 擼起袖子就是干?
    • 定制一個基本的文檔示例
    • 文檔如何分組?
    • 如何添加授權(quán)信息?
    • 如何攜帶公共的請求參數(shù)?
  • 粗略是一個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刷屏,官方表示這是一個突破性的變更,有很多的亮點,我還真不太相信,今天來帶大家嘗嘗鮮,看看這碗湯到底鮮不鮮....

官方文檔如何說?

該項目開源在Github上,地址:https://github.com/springfox/springfox。

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

  1. 刪除了對springfox-swagger2的依賴
  2. 刪除所有@EnableSwagger2...注解
  3. 添加了springfox-boot-starter依賴項
  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主推的一大特色就是這個啟動器,那么這個啟動器做了什么呢?

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

找到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?
{

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

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

擼起袖子就是干?

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

定制一個基本的文檔示例

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

@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這個注解文檔解釋如下:

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這個注解才會生成Swagger文檔」

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

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

文檔如何分組?

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

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

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

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

如下配置兩個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如下,分為前臺和后臺兩個不同屬性的配置:

/**
?*?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;
????}
}
此時的文檔截圖如下,可以看到有了兩個不同的分組:

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

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

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

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

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


????@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按鈕,只需要將請求頭添加進去即可。如下圖:

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

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

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

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

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

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

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

粗略是一個BUG

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

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

@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這個注解的作用就是導(dǎo)入OpenApiDocumentationConfiguration這個配置類,納尼???

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

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

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

總結(jié)

這篇文章也是嘗了個鮮,個人感覺不太香,有點失望。你喜歡嗎?


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

跨需求、供應(yīng)和生產(chǎn)計劃的端到端功能使CCH® Tagetik成為滿足各行各業(yè)預(yù)測性規(guī)劃要求的優(yōu)先戰(zhàn)略選擇。 北京2022年4月18日 /美通社/ -- 專業(yè)信息、軟件解決方案和服務(wù)的全球領(lǐng)先者威科集團今天宣布,...

關(guān)鍵字: ge

(全球TMT2022年4月18日訊)專業(yè)信息、軟件解決方案和服務(wù)的全球領(lǐng)先者威科集團宣布,其CCH? Tagetik供應(yīng)鏈規(guī)劃專家解決方案在Nucleus Research 2022年供應(yīng)鏈規(guī)劃價值矩陣中榮獲“領(lǐng)先者”...

關(guān)鍵字: ge

(全球TMT2022年4月14日訊)Cision旗下公司美通社宣布推出Homepage News發(fā)布服務(wù),將企業(yè)新聞稿直接發(fā)布到海外知名財經(jīng)網(wǎng)站(Benzinga和Markets Insider)的首頁位置。網(wǎng)站首頁通...

關(guān)鍵字: ge

北京2022年4月11日 /美通社/ -- 亞馬遜云科技助力數(shù)據(jù)服務(wù)和管理平臺提供商Kyligence構(gòu)建企業(yè)級云原生大數(shù)據(jù)OLAP解決方案,使其云上交付速度提升30%。同時,通過加入“ISV(獨立軟件供應(yīng)商)加速贏計劃...

關(guān)鍵字: ce ge 進程

(全球TMT2022年4月11日訊)亞馬遜云科技助力數(shù)據(jù)服務(wù)和管理平臺提供商Kyligence構(gòu)建企業(yè)級云原生大數(shù)據(jù)OLAP解決方案,使其云上交付速度提升30%。同時,通過加入“ISV(獨立軟件供應(yīng)商)加速贏計劃”,K...

關(guān)鍵字: 亞馬遜 ge ce

新加坡2022年3月24日 /美通社/ -- 國際著名網(wǎng)上多資產(chǎn)交易平臺Vantage今日宣布,在2022年ADVFN國際金融大獎上獲得"亞太區(qū)最佳交易服務(wù)供應(yīng)商&...

關(guān)鍵字: ge AD

全新2U、3節(jié)點、短機身服務(wù)器將智能邊緣高密度運算的節(jié)點密度提高50% 加州圣何塞2022年2月...

關(guān)鍵字: ge ic 物聯(lián)網(wǎng)

(全球TMT2022年2月21日訊)Super Micro Computer, Inc. (SMCI) 為高性能運算、儲存、網(wǎng)絡(luò)解決方案和綠色計算技術(shù)等領(lǐng)域的全球領(lǐng)導(dǎo)者,推出專為5G、物聯(lián)網(wǎng)和智能邊緣應(yīng)用設(shè)計...

關(guān)鍵字: 節(jié)點 ic ge

助力企業(yè)突破設(shè)備限制,實現(xiàn)創(chuàng)新 丹佛2021年2月8日 /美通社/ -- 現(xiàn)今,眾企業(yè)需要在分布式計算架構(gòu)中快速提供服務(wù),以緊跟時代變革之步伐。Lumen Technolo...

關(guān)鍵字: ge 虛擬化 應(yīng)用程序

(全球TMT2022年1月24日訊)The Orangeblowfish(呈合創(chuàng)意設(shè)計(上海)有限公司)在2022年迎來10周歲生日,以全新的形象慶祝10周年,并以粉色作為他們新的品牌色。2012年1月,在毫無相關(guān)行業(yè)...

關(guān)鍵字: ge
關(guān)閉