SpringBoot集成Swagger2生成接口文檔

原文地址:https://itweknow.cn/detail?id=56 , 歡迎大家訪問掌挚。

我們提供Restful接口的時候已旧,API文檔是尤為的重要策吠,它承載著對接口的定義层皱,描述等伴箩。它還是和API消費方溝通的重要工具识椰。在實際情況中由于接口和文檔存放的位置不同绝葡,我們很難及時的去維護文檔。個人在實際的工作中就遇到過很多接口更新了很久腹鹉,但是文檔卻還是老版本的情況藏畅,其實在這個時候這份文檔就已經(jīng)失去了它存在的意義。而Swagger是目前我見過的最好的API文檔生成工具功咒,使用起來也很方便愉阎,還可以直接調試我們的API。我們今天就來看下Swagger2SpringBoot的結合力奋。

準備工作

  • 一個SpringBoot項目榜旦,可以直接去官網(wǎng)生成一個demo
  • 一個用戶類景殷。
package cn.itweknow.springbootswagger.model;

import java.io.Serializable;

/**
 * @author ganchaoyang
 * @date 2018/12/19 10:29
 * @description
 */
public class User implements Serializable {

    private Integer id;

    private String name;

    private String password;

    private String email;
}

項目依賴

Web Service肯定是一個Web項目章办,所以我們這里依賴了spring-boot-starter-web包,其他兩個包就是和Swagger相關的包了滨彻。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

Swagger配置

Springfox Docket實例為Swagger配置提供了便捷的配置方法以及合理的默認配置藕届。我們將通過創(chuàng)建一個Docket實例來對Swagger進行配置,具體配置如下所示亭饵。

@Configuration
@EnableSwagger2
public class SwaggerConfig extends WebMvcConfigurationSupport {

    @Bean
    public Docket productApi() {
        return new Docket(DocumentationType.SWAGGER_2).select()
                // 掃描的包路徑
                .apis(RequestHandlerSelectors.basePackage("cn.itweknow.springbootswagger.controller"))
                // 定義要生成文檔的Api的url路徑規(guī)則
                .paths(PathSelectors.any())
                .build()
                // 設置swagger-ui.html頁面上的一些元素信息休偶。
                .apiInfo(metaData());
    }

    private ApiInfo metaData() {
        return new ApiInfoBuilder()
                // 標題
                .title("SpringBoot集成Swagger2")
                // 描述
                .description("這是一篇博客演示")
                // 文檔版本
                .version("1.0.0")
                .license("Apache License Version 2.0")
                .licenseUrl("https://www.apache.org/licenses/LICENSE-2.0")
                .build();
    }

    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");

        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }
}

上述代碼中的addResourceHandlers方法添加了兩個資源處理程序,這段代碼的主要作用是對Swagger UI的支持辜羊。

API文檔

好了踏兜,到這一步,我們已經(jīng)在一個SpringBoot項目中配置好了Swagger“送海現(xiàn)在碱妆,我們就來看一下如何去使用他。首先我們定義了一個Controller并提供了兩個接口:

  • 通過用戶id獲取用戶
  • 用戶登錄
@RestController
@RequestMapping("/user")
@Api(description = "用戶相關接口")
public class UserController {

    /**
     * 通過id查詢用戶
     * @return
     */
    @RequestMapping(value = "/get", method = RequestMethod.GET)
    @ApiOperation("根據(jù)id獲取用戶")
    public User getUserById(@ApiParam(value = "用戶id") Integer id) {
        return new User();
    }

    @RequestMapping(value = "/login", method = RequestMethod.POST)
    @ApiOperation("用戶登錄")
    public User login(@RequestBody User user) {
        return new User();
    }
}

相信大家都注意到了昔驱,這個Controller里面多了很多新的注解疹尾,比如說@Api,@ApiOperation等,下面我們就來一一解釋一下。

  • @Api,這個注解是用在Controller類上面的纳本,可以對Controller做必要的說明窍蓝。
  • @ApiOperation,作用在具體的方法上繁成,其實就是對一個具體的API的描述吓笙。
  • @ApiParam,對API參數(shù)的描述巾腕。
    到這里面睛,其實我們的Swagger就已經(jīng)可以有效果了,讓我們將項目運行起來先看看效果尊搬。訪問http://localhost:8080/swagger-ui.html即可侮穿。
    image

Model

在上面的圖中可以看到在頁面的下方有一個Models的標簽,那么這個是啥呢毁嗦。其實這個就是我們API中出現(xiàn)的一些對象的文檔亲茅,我們也可以通過注解來對這些對象中的字段做一些說明,以方便使用者理解狗准。以文章開頭提到的User類來做一個說明克锣。

@ApiModel("用戶實體")
public class User implements Serializable {

    @ApiModelProperty(value = "用戶id")
    private Integer id;

    @ApiModelProperty(value = "用戶名稱", required = true)
    private String name;

    @ApiModelProperty(value = "密碼", required = true)
    private String password;

    @ApiModelProperty(value = "用戶郵箱")
    private String email;
}

我們來看一下User類在Swagger上是如何展示的:

image

有一個細節(jié),那就是required = true的字段上面被紅星修飾腔长,代表了必填項袭祟。

API測試

swagger-ui.html頁面上我們可以直接測試API,如下圖所示捞附,點擊Try it out巾乳,然后填寫參數(shù),并點擊Execute即可進行調用鸟召。

image

好了胆绊,對于Swagger的介紹就到這里了,最后奉上本文的源碼地址欧募,請戳這里压状。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市跟继,隨后出現(xiàn)的幾起案子种冬,更是在濱河造成了極大的恐慌,老刑警劉巖舔糖,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件娱两,死亡現(xiàn)場離奇詭異,居然都是意外死亡金吗,警方通過查閱死者的電腦和手機十兢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門趣竣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人纪挎,你說我怎么就攤上這事「遥” “怎么了异袄?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長玛臂。 經(jīng)常有香客問我烤蜕,道長,這世上最難降的妖魔是什么迹冤? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任讽营,我火速辦了婚禮,結果婚禮上泡徙,老公的妹妹穿的比我還像新娘橱鹏。我一直安慰自己,他們只是感情好堪藐,可當我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布莉兰。 她就那樣靜靜地躺著,像睡著了一般礁竞。 火紅的嫁衣襯著肌膚如雪糖荒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天捶朵,我揣著相機與錄音,去河邊找鬼综看。 笑死,一個胖子當著我的面吹牛寓搬,可吹牛的內容都是我干的。 我是一名探鬼主播县耽,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼句喷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了唾琼?” 一聲冷哼從身側響起澎剥,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤锡溯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體祭饭,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡芜茵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年倡蝙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寺鸥。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡胆建,死狀恐怖烤低,靈堂內的尸體忽然破棺而出笆载,到底是詐尸還是另有隱情,我是刑警寧澤凉驻,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站闯第,受9級特大地震影響,放射性物質發(fā)生泄漏咳短。R本人自食惡果不足惜蛛淋,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望褐荷。 院中可真熱鬧,春花似錦叛甫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽毁菱。三九已至,卻和暖如春贮庞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背物喷。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工捉邢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留商膊,地道東北人伏伐。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓藐翎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親吝镣。 傳聞我的和親對象是個殘疾皇子昆庇,可洞房花燭夜當晚...
    茶點故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內容