Swagger2 整合springboot 2.X

swagger是什么涎嚼?

隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展阱州,現(xiàn)在的網(wǎng)站架構(gòu)基本都由原來的后端渲染,變成了:前端渲染法梯、先后端分離的形態(tài)苔货,而且前端技術(shù)和后端技術(shù)在各自的道路上越走越遠(yuǎn)。
前端和后端的唯一聯(lián)系立哑,變成了API接口夜惭;API文檔變成了前后端開發(fā)人員聯(lián)系的紐帶,變得越來越重要铛绰,swagger就是一款讓你更好的書寫API文檔的框架诈茧。

swagger優(yōu)點?

  • 完全實現(xiàn)了前后端交互的實時性捂掰,可以隨時對更改的接口文檔進(jìn)行查看敢会,防止出現(xiàn)調(diào)用接口失誤。
  • 前端人員可以自行在網(wǎng)站上進(jìn)行測試
  • 可以自動生成你想要的語言模式这嚣,便于切換

框架說明及使用

現(xiàn)在SWAGGER官網(wǎng)主要提供了幾種開源工具鸥昏,提供相應(yīng)的功能〗阒悖可以通過配置甚至是修改源碼以達(dá)到你想要的效果吏垮。

  • Swagger Codegen
    通過Codegen 可以將描述文件生成html格式和cwiki形式的接口文檔,同時也能生成多鐘語言的服務(wù)端和客戶端的代碼罐旗。支持通過jar包膳汪,docker,node等方式在本地化執(zhí)行生成九秀。也可以在后面的Swagger Editor中在線生成遗嗽。
  • Swagger UI
    提供了一個可視化的UI頁面展示描述文件。接口的調(diào)用方颤霎、測試、項目經(jīng)理等都可以在該頁面中對相關(guān)接口進(jìn)行查閱和做一些簡單的接口請求。該項目支持在線導(dǎo)入描述文件和本地部署UI項目友酱。
  • Swagger Editor
    類似于markendown編輯器的編輯Swagger描述文件的編輯器晴音,該編輯支持實時預(yù)覽描述文件的更新效果。也提供了在線編輯器和本地部署編輯器兩種方式缔杉。
  • Swagger Inspector
    感覺和postman差不多锤躁,是一個可以對接口進(jìn)行測試的在線版的postman。比在Swagger UI里面做接口請求或详,會返回更多的信息系羞,也會保存你請求的實際請求參數(shù)等數(shù)據(jù)。
  • Swagger Hub
    集成了上面所有項目的各個功能霸琴,你可以以項目和版本為單位椒振,將你的描述文件上傳到Swagger Hub中。在Swagger Hub中可以完成上面項目的所有工作梧乘,需要注冊賬號澎迎,分免費版和收費版。

注:Springfox Swagger: Spring 基于swagger規(guī)范选调,可以將基于SpringMVC和Spring Boot項目的項目代碼夹供,自動生成JSON格式的描述文件。本身不是屬于Swagger官網(wǎng)提供的仁堪,在這里列出來做個說明哮洽,方便后面作一個使用的展開。

Springboot 2.X 整合 Swagger2

  1. 添加maven 依賴
 <!-- swagger框架 -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.7.0</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.7.0</version>
    </dependency>

@Configuration
@EnableSwagger2
public class Swagger2Config {

/**
 * 創(chuàng)建swagger ui的摘要
 *
 * @return
 */
@Bean
public Docket docket() {
    return new Docket(DocumentationType.SWAGGER_2)
            .apiInfo(apiInfo())
            .select()
            // 掃描的class的包路徑
.apis(RequestHandlerSelectors.basePackage("com.wangyq.boot.controller"))
            // 只掃描類上有API注解的class
            // .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
            // 只掃描方法上有ApiOperation注解的方法                         //.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
            .paths(PathSelectors.any())
            .build();
}

/**
 * swagger ui的標(biāo)題信息
 *
 * @return
 */
private ApiInfo apiInfo() {
    return new ApiInfoBuilder()
            .title("標(biāo)題")
            .description("副標(biāo)題")
            .version("1.0")
            .build();

}

}

  1. 添加注解

@Controller
@RequestMapping("/test")
@Api(value = "/test", description = "Operations about test", tags = "測試管理")
public class TestController extends BaseController {
    private Logger logger = LoggerFactory.getLogger(TestController.class);

    @RequestMapping(value = "/testRateLimit5", method = {RequestMethod.GET})
    @ResponseBody
    @RateLimit(limitNum = 2)
    @ApiOperation(value = "測試接口限流", notes = "每秒鐘限流5 token", httpMethod = "GET")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "data", value = "返回的數(shù)據(jù)對象", dataType = "Object"),
            @ApiImplicitParam(name = "msg", value = "消息", dataType = "String"),
            @ApiImplicitParam(name = "code", value = "狀態(tài)碼", dataType = "Integer")
    })
    public Result testRateLimit5() {
        logger.info("調(diào)用了 testRateLimit5 方法");
        return ResultUtil.success("調(diào)用了 testRateLimit5 方法弦聂!");
    }

    @GetMapping(value = "/testRateLimit10")
    @RateLimit(limitNum = 10)
    public Result testRateLimit10() {
        logger.info("調(diào)用了 testRateLimit10 方法");
        return ResultUtil.success("調(diào)用了 testRateLimit10 方法鸟辅!");
    }
}
  1. 啟動springboot項目,訪問http://[ip]:[port]/swagger-ui.html横浑,如:http://localhost:8080/swagger-ui.html
Image.png

swagger在spring中常用注解說明

  • Api剔桨、ApiIgnore
  • ApiModel
  • ApiModelProperty
  • ApiOperation
  • ApiParam、ApiImplicitParam徙融、ApiImplicitParams
  • ApiResponse
  • ApiResponses
  • ResponseHeader
  1. @Api
    Api注解用于類上洒缀,說明該類的作用∑奂剑可以標(biāo)記一個Controller類做為swagger 文檔資源树绩。與Controller注解并列使用。
    @Api(value = "/test", description = "Operations about test", tags = "測試管理") @Controller
    @Api.png
  1. ApiModel
    ApiModel注解用于表示對類進(jìn)行說明隐轩,描述一個Model的信息饺饭,表示參數(shù)用實體類接收。

  2. ApiModelProperty
    ApiModelProperty注解用于方法职车、字段瘫俊,表示對model屬性的說明或者數(shù)據(jù)操作更改鹊杖,配合ApiModel一起使用。

  3. ApiOperation
    ApiOperation注解扛芽,用在方法上骂蓖,說明方法的作用,與Controller中的方法并列使用川尖。


    ApiOperation.png
  1. ApiImplicitParams
    ApiImplicitParams注解用于方法上包含一組參數(shù)說明登下。

  2. ApiParam
    ApiParam注解用在@ApiImplicitParams的方法里邊,屬性配置:


    @ApiParam.png
  1. ApiImplicitParam
    ApiImplicitParam注解用于描述請求參數(shù)叮喳,根據(jù)不同的paramType類型被芳,請求的參數(shù)來源不同。屬性及取值如下:


    @ApiImplicitParam.png
  1. ApiResponse
    ApiResponse注解用于響應(yīng)配置馍悟,與Controller中的方法并列使用畔濒。屬性配置:


    ApiResponse.png
  1. ApiResponses
    ApiResponses注解中包含ApiResponse,用于描述一組ApiResponse值赋朦。

  2. ResponseHeader
    ResponseHeader注解用于設(shè)置響應(yīng)頭篓冲,與Controller中的方法并列使用。 屬性配置:


    ResponseHeader.png
  1. ApiIgnore
    ApiIgnore注解用于類或方法上宠哄,表示不需要swagger處理壹将。

友情鏈接

swagger官網(wǎng)地址

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市毛嫉,隨后出現(xiàn)的幾起案子诽俯,更是在濱河造成了極大的恐慌,老刑警劉巖承粤,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件暴区,死亡現(xiàn)場離奇詭異,居然都是意外死亡辛臊,警方通過查閱死者的電腦和手機仙粱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來彻舰,“玉大人伐割,你說我怎么就攤上這事∪谢剑” “怎么了隔心?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長尚胞。 經(jīng)常有香客問我硬霍,道長,這世上最難降的妖魔是什么笼裳? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任唯卖,我火速辦了婚禮粱玲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拜轨。我一直安慰自己密幔,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布撩轰。 她就那樣靜靜地躺著,像睡著了一般昧廷。 火紅的嫁衣襯著肌膚如雪堪嫂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天木柬,我揣著相機與錄音皆串,去河邊找鬼。 笑死眉枕,一個胖子當(dāng)著我的面吹牛恶复,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播速挑,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼谤牡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了姥宝?” 一聲冷哼從身側(cè)響起翅萤,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎腊满,沒想到半個月后套么,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡碳蛋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年胚泌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肃弟。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡玷室,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出愕乎,到底是詐尸還是另有隱情阵苇,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布感论,位于F島的核電站绅项,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏比肄。R本人自食惡果不足惜快耿,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一囊陡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧掀亥,春花似錦撞反、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至撮竿,卻和暖如春吮便,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背幢踏。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工髓需, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人房蝉。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓僚匆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親搭幻。 傳聞我的和親對象是個殘疾皇子咧擂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,614評論 2 353

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