SpringBoot——整合Swagger

點擊進(jìn)入Swagger官網(wǎng)

什么是Swagger?

官方說法:Swagger 是一款RESTFUL接口的文檔在線自動生成+功能測試功能軟件辩涝。Swagger 是一個規(guī)范和完整的框架勘天,用于生成怔揩、描述误辑、調(diào)用和可視化 RESTful 風(fēng)格的 Web 服務(wù)沧踏〗矶ぃ總體目標(biāo)是使客戶端和文件系統(tǒng)作為服務(wù)器以同樣的速度來更新翘狱。文件的方法砰苍,參數(shù)和模型緊密集成到服務(wù)器端的代碼潦匈,允許API來始終保持同步。Swagger 讓部署管理和使用功能強大的API從未如此簡單茬缩。

目前的個人見解:Swagger類似于Postman接口測試工具赤惊,但是其又比Postman強大很多凰锡,更加便于前后端交互和API測試,它可以自動生成文檔和測試接口的ui未舟,較適用于RESTful風(fēng)格當(dāng)中使用。

Swagger的一些常用注解:

通過注解接口生成文檔掂为,包括接口名裕膀,請求方法,參數(shù)勇哗,返回信息等

@Api:修飾整個類昼扛,用于controller類上(注明當(dāng)前類的信息)

@ApiOperation:描述一個接口,用戶controller方法上(注明方法信息)

@ApiParam:單個參數(shù)描述

@ApiModel:用來對象接收參數(shù),即返回對象

@ApiProperty:用對象接收參數(shù)時欲诺,描述對象的一個字段

@ApiResponse:HTTP響應(yīng)其中1個描述

@ApiResponses:HTTP響應(yīng)整體描述

@ApiError :發(fā)生錯誤返回的信息

@ApiImplicitParam:一個請求參數(shù)

@ApiImplicitParams:多個請求參數(shù)

SpringBoot2.1.1 整合Swagger2:

這里作者使用的是Boot目前的最新版本對Swagger(2.7.0)進(jìn)行一個簡單的整合及漢化抄谐,當(dāng)然2.0以上版本也是通用的(基本沒什么沖突的哈!扰法! 若有問題歡迎留言糾正)

1.通過Maven依賴的方式添加Swagger依賴到pom
        <!--Swagger2依賴 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.7.0</version>
        </dependency>
       <!--Swagger2  UI包 即:可通過html頁面去訪問Swagger測試接口-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.7.0</version>
        </dependency>
2.書寫Swagger在SpringBoot中的配置類
package com.itcast.swaggertest.config;

/**
 * @authro JIAQI
 * @date 2018/12/4 - 20:51
 */

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                //指定提供接口所在的基包
                .apis(RequestHandlerSelectors.basePackage("com.itcast.controller"))
                .paths(PathSelectors.any())
                .build();
    }
    /**
     * 該套 API 說明蛹含,包含作者、簡介迹恐、版本挣惰、host、服務(wù)URL
     * @return
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                // 標(biāo)題
                .title("標(biāo)題:某公司——XXXX——接口文檔")
                //模板描述
                .description("描述:XXXXXXX殴边,具體包括XXX,XXX模板")
                .contact(new Contact("作者XX", url, host))  //當(dāng)然也可以用null來表示
                .version("1.0")  //對應(yīng)的版本號
                .build();
    }
}
3.書寫測試類并運行程序
package com.itcast.swaggertest.controller;

/**
 * @authro JIAQI
 * @date 2018/12/4 - 20:56
 */

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

/**
 * @ApiOperation:用在請求的方法上憎茂,說明方法的用途、作用 value="說明方法的用途竖幔、作用"
 * notes="方法的備注說明"
 * @ApiImplicitParams:用在請求的方法上,表示一組參數(shù)說明
 * @ApiImplicitParam:用在@ApiImplicitParams注解中是偷,指定一個請求參數(shù)的各個方面 name:參數(shù)名
 * value:參數(shù)的漢字說明拳氢、解釋
 * required:參數(shù)是否必須傳
 * paramType:參數(shù)放在哪個地方
 * · header --> 請求參數(shù)的獲取:@RequestHeader
 * · query --> 請求參數(shù)的獲鹊懊:@RequestParam
 * · path(用于restful接口)--> 請求參數(shù)的獲炔銎馈:@PathVariable
 * · body(不常用)
 * · form(不常用)
 * dataType:參數(shù)類型,默認(rèn)String刺啦,其它值dataType="Integer"
 * defaultValue:參數(shù)的默認(rèn)值
 * @ApiResponses:用在請求的方法上留特,表示一組響應(yīng)
 * @ApiResponse:用在@ApiResponses中,一般用于表達(dá)一個錯誤的響應(yīng)信息 code:數(shù)字,例如400
 * message:信息蜕青,例如"請求參數(shù)沒填好"
 * response:拋出異常的類
 * @ApiModel:用于響應(yīng)類上苟蹈,表示一個返回響應(yīng)數(shù)據(jù)的信息 (這種一般用在post創(chuàng)建的時候,使用@RequestBody這樣的場景右核,
 * 請求參數(shù)無法使用@ApiImplicitParam注解進(jìn)行描述的時候)
 * @ApiModelProperty:用在屬性上慧脱,描述響應(yīng)類的屬性
 */


@Api(tags = "Swagger測試")
@Controller
@Slf4j
public class Mycontroller {
    @ApiOperation(value = "查詢學(xué)生信息接口", notes = "查詢學(xué)生信息")
    @GetMapping("/select")
    @ResponseBody
    public String selectStudentMsg() {
        System.out.println("查詢了學(xué)生信息");
        return "查詢學(xué)生信息成功";
    }
}
4.結(jié)果如下:

Swagger接口測試的地址為(8081為你所設(shè)置的端口號,以下的頁面是有經(jīng)過漢化的贺喝,下面也會詳細(xì)說下漢化過程):http://localhost:8081/swagger-ui.html



5.Swagger如何漢化:

首先我們在Maven中所加入的SwaggerUI包中不難看到結(jié)果如下:


在倒數(shù)第二個我們可以看到swagger-ui.html的html頁面,其實這個頁面也就是Swagger的測試接口顯示頁面搜变,那么如何去漢化呢采缚?

1.首先我們應(yīng)該找到我們所添加版本的swagger-ui.html然后在項目的resources文件下創(chuàng)建META-INF.resources文件针炉;

2.其次復(fù)制jar包中的swagger-ui.htmlresources下所創(chuàng)建的META-INF.resources文件中挠他;

3.再者在META-INF.resources文件下創(chuàng)建webjars.springfox-swagger-ui.lang(我們也可以去查看jar包中的lang文件,從中不難看出里面是在存放JS文件的篡帕,這么寫的話也就是為了去替換文本做到進(jìn)行漢化)殖侵;

4.最后我們在文件webjars.springfox-swagger-ui.lang中創(chuàng)建我們所定義的js文件(zh-cn.js)镰烧,并且在html文件中引入我們所創(chuàng)建的js:

/**
 * Created by dell on 2018/12/4.
 */
/* 用戶自定義Swagger漢化,可根據(jù)自己的需求去做進(jìn)一步修改*/
window.SwaggerTranslator.learn({
    "Warning: Deprecated":"警告:已過時",
    "Implementation Notes":"實現(xiàn)備注",
    "Response Class":"響應(yīng)類",
    "Status":"狀態(tài)",
    "Parameters":"參數(shù)",
    "Parameter":"參數(shù)",
    "Value":"值",
    "Description":"描述",
    "Parameter Type":"參數(shù)類型",
    "Data Type":"數(shù)據(jù)類型",
    "Response Messages":"響應(yīng)消息",
    "HTTP Status Code":"HTTP狀態(tài)碼",
    "Reason":"原因",
    "Response Model":"響應(yīng)模型",
    "Request URL":"請求URL",
    "Response Body":"響應(yīng)體",
    "Response Code":"響應(yīng)碼",
    "Response Headers":"響應(yīng)頭",
    "Hide Response":"隱藏響應(yīng)",
    "Headers":"頭",
    "Try it out!":"試一下拢军!",
    "Show/Hide":"顯示/隱藏",
    "List Operations":"顯示操作",
    "Expand Operations":"展開操作",
    "Raw":"原始",
    "can't parse JSON.  Raw result":"無法解析JSON. 原始結(jié)果",
    "Example Value":"示例",
    "Click to set as parameter value":"點擊設(shè)置參數(shù)",
    "Model Schema":"模型架構(gòu)",
    "Model":"模型",
    "apply":"應(yīng)用",
    "Username":"用戶名",
    "Password":"密碼",
    "Terms of service":"服務(wù)條款",
    "Created by":"創(chuàng)建者",
    "See more at":"查看更多:",
    "Contact the developer":"聯(lián)系開發(fā)者",
    "api version":"api版本",
    "Response Content Type":"響應(yīng)Content Type",
    "Parameter content type:":"參數(shù)類型:",
    "fetching resource":"正在獲取資源",
    "fetching resource list":"正在獲取資源列表",
    "Explore":"瀏覽",
    "Show Swagger Petstore Example Apis":"顯示 Swagger Petstore 示例 Apis",
    "Can't read from server.  It may not have the appropriate access-control-origin settings.":"無法從服務(wù)器讀取≌睿可能沒有正確設(shè)置access-control-origin茉唉。",
    "Please specify the protocol for":"請指定協(xié)議:",
    "Can't read swagger JSON from":"無法讀取swagger JSON于",
    "Finished Loading Resource Information. Rendering Swagger UI":"已加載資源信息。正在渲染Swagger UI",
    "Unable to read api":"無法讀取api",
    "from path":"從路徑",
    "server returned":"服務(wù)器返回"
});
translator.js為國際化的意思结执,此js如果不引用的話是會造成漢化失敗的6嚷健!献幔!
  <!--國際化操作:選擇中文版 -->
    <script src='webjars/springfox-swagger-ui/lang/translator.js' type='text/javascript'></script>
    <script src='webjars/springfox-swagger-ui/lang/zh-cn.js' type='text/javascript'></script>
以上js代碼網(wǎng)上有很多地方可以參考懂傀,大家可根據(jù)自己的需求進(jìn)行進(jìn)一步的修改(懶人的話直接copy使用也問題不大哈,當(dāng)然一定要記得在html文件中引入我們所創(chuàng)建的js文件)蜡感。其實漢化的過程并不復(fù)雜說白了也就是去替換原來jar包的代碼蹬蚁,當(dāng)然不進(jìn)行漢化的話也是無傷大雅的,具體還是看個人喜好郑兴。以上的話只是屬于一個簡單的demo,如果說你是用的是2.8版本的話那么漢化的過程跟2.8以下版本也是有所區(qū)別的。(初寫筆記情连,若有不對的地方還歡迎各位前輩糾正 萬分感謝_创狻!)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市球榆,隨后出現(xiàn)的幾起案子朽肥,更是在濱河造成了極大的恐慌,老刑警劉巖持钉,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衡招,死亡現(xiàn)場離奇詭異,居然都是意外死亡每强,警方通過查閱死者的電腦和手機始腾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來空执,“玉大人浪箭,你說我怎么就攤上這事”姘恚” “怎么了奶栖?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長门坷。 經(jīng)常有香客問我默蚌,道長绸吸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮撑刺,結(jié)果婚禮上握玛,老公的妹妹穿的比我還像新娘挠铲。我一直安慰自己拂苹,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布丘喻。 她就那樣靜靜地躺著泉粉,像睡著了一般嗡靡。 火紅的嫁衣襯著肌膚如雪讨彼。 梳的紋絲不亂的頭發(fā)上哈误,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天,我揣著相機與錄音,去河邊找鬼珠漂。 笑死媳危,一個胖子當(dāng)著我的面吹牛冈敛,可吹牛的內(nèi)容都是我干的抓谴。 我是一名探鬼主播癌压,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼集侯,長吁一口氣:“原來是場噩夢啊……” “哼棠枉!你這毒婦竟也來了辈讶?” 一聲冷哼從身側(cè)響起荞估,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤勘伺,失蹤者是張志新(化名)和其女友劉穎飞醉,沒想到半個月后缅帘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钦无,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡失暂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年凭峡,在試婚紗的時候發(fā)現(xiàn)自己被綠了摧冀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片索昂。...
    茶點故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖框产,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情秉宿,我是刑警寧澤描睦,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布忱叭,位于F島的核電站韵丑,受9級特大地震影響撵彻,放射性物質(zhì)發(fā)生泄漏陌僵。R本人自食惡果不足惜碗短,卻給世界環(huán)境...
    茶點故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一奔坟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鸯隅,春花似錦蝌以、人聲如沸跟畅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽硝训。三九已至窖梁,卻和暖如春纵刘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背位谋。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人陶缺。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親百框。 傳聞我的和親對象是個殘疾皇子铐维,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,652評論 2 354

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

  • 引入 swagger 依賴關(guān)系 swagger 配置 swagger2 整合成功棠众。訪問地址 http://loca...
    EricDD閱讀 2,075評論 0 2
  • 1. pom.xml文件中引入依賴 2. 創(chuàng)建swagger配置類 啟動項目 訪問ui地址 http://loca...
    東方舵手閱讀 2,578評論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理新荤,服務(wù)發(fā)現(xiàn)苛骨,斷路器俐筋,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,979評論 3 119
  • 會不會管理老板粱挡,是月薪5千和月薪5萬的主要區(qū)別_ Connie LinkedIn 一定要把老板的期望搞清楚询筏,以免用...
    戰(zhàn)敭閱讀 242評論 0 2