SpringBoot 集成 Swagger 構(gòu)建Restful Api 文檔

Swagger 是一個(gè)簡(jiǎn)單但功能強(qiáng)大的 API 表達(dá)工具。它具有地球上最大的 API 工具生態(tài)系統(tǒng)悴灵,數(shù)以千計(jì)的開發(fā)人員扛芽,使用幾乎所有的現(xiàn)代編程語(yǔ)言,都在支持和使用 Swagger积瞒。使用 Swagger 生成 API川尖,我們可以得到交互式文檔,自動(dòng)生成代碼的 SDK 以及 API 的發(fā)現(xiàn)特性等茫孔。

使用 Spring Boot 集成 Swagger 的理念是叮喳,使用注解來標(biāo)記出需要在 API 文檔中展示的信息,Swagger 會(huì)根據(jù)項(xiàng)目中標(biāo)記的注解來生成對(duì)應(yīng)的 API 文檔缰贝。Swagger 被號(hào)稱世界上最流行的 API 工具馍悟,它提供了 API 管理的全套解決方案,API 文檔管理需要考慮的因素基本都包含剩晴,這里將講解最常用的定制內(nèi)容赋朦。

環(huán)境以及版本:

SpringBoot : 2.0.5.RELEASE
JDK :1.8

maven 依賴

    <!--swagger2-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.8.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.8.0</version>
        </dependency>

創(chuàng)建 SwaggerConfig 配置類

@Configuration
@EnableSwagger2
public class SwaggerConfig {
}

然后添加
在 SwaggerConfig 的類上添加兩個(gè)注解:

@Configuration,啟動(dòng)時(shí)加載此類
@EnableSwagger2李破,表示此項(xiàng)目啟用 Swagger API 文檔
在 SwaggerConfig 中添加兩個(gè)方法:

@Bean
public Docket api() {
    return new Docket(DocumentationType.SWAGGER_2)
            .apiInfo(apiInfo())
            .select()
            // 自行修改為自己的包路徑
            .apis(RequestHandlerSelectors.basePackage("com.neo.xxx"))
            .paths(PathSelectors.any())
            .build();
}

主要配置頁(yè)面展示的基本信息包括,標(biāo)題壹将、描述嗤攻、版本、服務(wù)條款诽俯、聯(lián)系方式等妇菱,查看 ApiInfo 類的源碼還會(huì)發(fā)現(xiàn)支持 license 配置等。

啟動(dòng)后

在這里插入圖片描述

訪問地址可以看到

在這里插入圖片描述

還可以進(jìn)行測(cè)試

在這里插入圖片描述

結(jié)果

在這里插入圖片描述

Swagger 常用注解

Swagger 通過注解表明該接口會(huì)生成文檔暴区,包括接口名闯团、請(qǐng)求方法、參數(shù)仙粱、返回信息等房交,常用注解內(nèi)容如下:

作用范圍 API 使用位置
協(xié)議集描述 @Api 用于 Controller 類上
協(xié)議描述 @ApiOperation 用在 Controller 的方法上
非對(duì)象參數(shù)集 @ApiImplicitParams 用在 Controller 的方法上
非對(duì)象參數(shù)描述 @ApiImplicitParam 用在 @ApiImplicitParams 的方法里邊
響應(yīng)集 @ApiResponses 用在 Controller 的方法上
響應(yīng)信息參數(shù) @ApiResponse 用在 @ApiResponses 里邊
描述返回對(duì)象的意義 @ApiModel 用在返回對(duì)象類上
對(duì)象屬性 @ApiModelProperty 用在出入?yún)?shù)對(duì)象的字段上

@Api 的使用
Api 作用在 Controller 類上,做為 Swagger 文檔資源伐割,該注解將一個(gè) Controller(Class)標(biāo)注為一個(gè) Swagger 資源(API)两蟀。在默認(rèn)情況下萨惑,Swagger-Core 只會(huì)掃描解析具有 @Api 注解的類毅访,而會(huì)自動(dòng)忽略其他類別資源(JAX-RS endpoints、Servlets 等)的注解尚胞。


@Api(value = "驗(yàn)證測(cè)試",description = "驗(yàn)證數(shù)據(jù)",consumes = "application/json",produces = "http",hidden = true)
@RestController
public class validController {

與 Controller 注解并列使用,屬性配置如表所示:

屬性名稱 備注
value url 的路徑值
tags 如果設(shè)置這個(gè)值帜慢,value 的值會(huì)被覆蓋
description 對(duì) API 資源的描述
produces For example, "application/json, application/xml"
consumes For example, "application/json, application/xml"
protocols Possible values: http, https, ws, wss
authorizations 高級(jí)特性認(rèn)證時(shí)配置
hidden 配置為 true 將在文檔中隱藏

在這里插入圖片描述

@ApiOperation 的使用
ApiOperation 定義在方法上笼裳,描述方法名、方法解釋粱玲、返回信息躬柬、標(biāo)記等信息。

  @ApiOperation(
            value = "save 消息列表",
            notes = "save 完整的消息內(nèi)容列表",
            produces="application/www-xxxxx, application/xml",
            consumes="application/json, application/xml",
            response = List.class
    )

屬性名稱 備注
value url 的路徑值
tags 如果設(shè)置這個(gè)值密幔、value的 值會(huì)被覆蓋
produces For example, "application/json, application/xml"
consumes For example, "application/json, application/xml"
protocols Possible values: http, https, ws, wss
authorizations 高級(jí)特性認(rèn)證時(shí)配置
hidden 配置為 true 將在文檔中隱藏
response 返回的對(duì)象
responseContainer 這些對(duì)象是有效的 "List", "Set" or "Map"楔脯,其他無效
httpMethod "GET"、"HEAD"胯甩、"POST"昧廷、"PUT"、"DELETE"偎箫、"OPTIONS" and "PATCH"
code http 的狀態(tài)碼 默認(rèn) 200
extensions 擴(kuò)展屬性

在這里插入圖片描述

@ApiImplicitParams 和 @ApiImplicitParam 的使用
@ApiImplicitParams 用于描述方法的返回信息木柬,和 @ApiImplicitParam 注解配合使用;@ApiImplicitParam 用來描述具體某一個(gè)參數(shù)的信息淹办,包括參數(shù)的名稱眉枕、類型、限制等信息怜森。

   @ApiOperation(
            value = "save 消息列表",
            notes = "save 完整的消息內(nèi)容列表",
            produces="application/www-xxxxx, application/xml",
            consumes="application/json, application/xml",
            response = List.class
    )
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id", value = "消息 ID", required = true, dataType = "Long", paramType = "query"),
            @ApiImplicitParam(name = "name", value = "姓名", required = true, dataType = "String", paramType = "query"),
            @ApiImplicitParam(name = "age", value = "年齡", required = true, dataType = "int", paramType = "query"),
    })

屬性名稱 備注
name 接收參數(shù)名
value 接收參數(shù)的意義描述
required 參數(shù)是否必填值為 true 或者 false
dataType 參數(shù)的數(shù)據(jù)類型只作為標(biāo)志說明速挑,并沒有實(shí)際驗(yàn)證
paramType 查詢參數(shù)類型,其值:
path 以地址的形式提交數(shù)據(jù)
query 直接跟參數(shù)完成自動(dòng)映射賦
body 以流的形式提交副硅,僅支持 POST
header 參數(shù)在 request headers 里邊提交
form 以 form 表單的形式提交 僅支持 POST
defaultValue 默認(rèn)值

在這里插入圖片描述

@ApiResponses 和 @ApiResponse 的使用
@ApiResponses 主要封裝方法的返回信息和 @ApiResponse 配置起來使用姥宝,@ApiResponse 定義返回的具體信息包括返回碼、返回信息等恐疲。

  @ApiOperation(value = "修改用戶", notes = "根據(jù)參數(shù)修改用戶")
    @ApiResponses({
            @ApiResponse(code = 100, message = "請(qǐng)求參數(shù)有誤"),
            @ApiResponse(code = 101, message = "未授權(quán)"),
            @ApiResponse(code = 103, message = "禁止訪問"),
            @ApiResponse(code = 104, message = "請(qǐng)求路徑不存在"),
            @ApiResponse(code = 200, message = "服務(wù)器內(nèi)部錯(cuò)誤")
    })
    @PutMapping(value = "updateUser")
    public ReturnModle updateUser(@Valid User user, BindingResult result) {
      return null;
    }

屬性名稱 備注
code http 的狀態(tài)碼
message 描述
response 默認(rèn)響應(yīng)類 Void
reference 參考
responseHeaders 封裝返回信息
responseContainer 字符串

在這里插入圖片描述

@ApiModel 和 @ApiModelProperty 的使用
在實(shí)際的項(xiàng)目中我們常常會(huì)封裝一個(gè)對(duì)象作為返回值腊满,@ApiModel 就是負(fù)責(zé)描述對(duì)象的信息,@ApiModelProperty 負(fù)責(zé)描述對(duì)象中屬性的相關(guān)內(nèi)容培己。

  @ApiOperation(value = "修改用戶", notes = "根據(jù)參數(shù)修改用戶")
    @PatchMapping(value = "updateUser")
    public ReturnModle<User> updateUser(@Valid User user, BindingResult result) {
      return new ReturnModle(0,"成功",user);
    }
在這里插入圖片描述

總結(jié)

通過 "絲襪哥"我們可以構(gòu)建一個(gè)很強(qiáng)大的restful api 文檔

我們既可以在管理界面測(cè)試也可以看到相應(yīng)的數(shù)據(jù)碳蛋,也可以通過命令方式去測(cè)試。

測(cè)試


在這里插入圖片描述

點(diǎn)擊 try it out 進(jìn)行測(cè)試


在這里插入圖片描述

響應(yīng)
在這里插入圖片描述
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末省咨,一起剝皮案震驚了整個(gè)濱河市肃弟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌茸炒,老刑警劉巖愕乎,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阵苇,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡感论,警方通過查閱死者的電腦和手機(jī)绅项,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來比肄,“玉大人快耿,你說我怎么就攤上這事》技ǎ” “怎么了掀亥?”我有些...
    開封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)妥色。 經(jīng)常有香客問我搪花,道長(zhǎng),這世上最難降的妖魔是什么嘹害? 我笑而不...
    開封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任撮竿,我火速辦了婚禮,結(jié)果婚禮上笔呀,老公的妹妹穿的比我還像新娘幢踏。我一直安慰自己,他們只是感情好许师,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開白布房蝉。 她就那樣靜靜地躺著,像睡著了一般微渠。 火紅的嫁衣襯著肌膚如雪搭幻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天逞盆,我揣著相機(jī)與錄音粗卜,去河邊找鬼。 笑死纳击,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的攻臀。 我是一名探鬼主播焕数,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼刨啸!你這毒婦竟也來了堡赔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤设联,失蹤者是張志新(化名)和其女友劉穎善已,沒想到半個(gè)月后灼捂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡换团,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年悉稠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片艘包。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡的猛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出想虎,到底是詐尸還是另有隱情卦尊,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布舌厨,位于F島的核電站岂却,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏裙椭。R本人自食惡果不足惜躏哩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望骇陈。 院中可真熱鬧震庭,春花似錦、人聲如沸你雌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)婿崭。三九已至拨拓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間氓栈,已是汗流浹背渣磷。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留授瘦,地道東北人醋界。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像提完,于是被迫代替她去往敵國(guó)和親形纺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容