SpringBoot——整合Swagger

點擊進入Swagger官網

什么是Swagger?

官方說法:Swagger 是一款RESTFUL接口的文檔在線自動生成+功能測試功能軟件。Swagger 是一個規范和完整的框架,用于生成、描述、調用和可視化 RESTful 風格的 Web 服務。總體目標是使客戶端和文件系統作為服務器以同樣的速度來更新。文件的方法,參數和模型緊密集成到服務器端的代碼,允許API來始終保持同步。Swagger 讓部署管理和使用功能強大的API從未如此簡單。

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

Swagger的一些常用注解:

通過注解接口生成文檔,包括接口名,請求方法,參數,返回信息等

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

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

@ApiParam:單個參數描述

@ApiModel:用來對象接收參數,即返回對象

@ApiProperty:用對象接收參數時,描述對象的一個字段

@ApiResponse:HTTP響應其中1個描述

@ApiResponses:HTTP響應整體描述

@ApiError :發生錯誤返回的信息

@ApiImplicitParam:一個請求參數

@ApiImplicitParams:多個請求參數

SpringBoot2.1.1 整合Swagger2:

這里作者使用的是Boot目前的最新版本對Swagger(2.7.0)進行一個簡單的整合及漢化,當然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、服務URL
     * @return
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                // 標題
                .title("標題:某公司——XXXX——接口文檔")
                //模板描述
                .description("描述:XXXXXXX,具體包括XXX,XXX模板")
                .contact(new Contact("作者XX", url, host))  //當然也可以用null來表示
                .version("1.0")  //對應的版本號
                .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:用在請求的方法上,表示一組參數說明
 * @ApiImplicitParam:用在@ApiImplicitParams注解中,指定一個請求參數的各個方面 name:參數名
 * value:參數的漢字說明、解釋
 * required:參數是否必須傳
 * paramType:參數放在哪個地方
 * · header --> 請求參數的獲取:@RequestHeader
 * · query --> 請求參數的獲取:@RequestParam
 * · path(用于restful接口)--> 請求參數的獲取:@PathVariable
 * · body(不常用)
 * · form(不常用)
 * dataType:參數類型,默認String,其它值dataType="Integer"
 * defaultValue:參數的默認值
 * @ApiResponses:用在請求的方法上,表示一組響應
 * @ApiResponse:用在@ApiResponses中,一般用于表達一個錯誤的響應信息 code:數字,例如400
 * message:信息,例如"請求參數沒填好"
 * response:拋出異常的類
 * @ApiModel:用于響應類上,表示一個返回響應數據的信息 (這種一般用在post創建的時候,使用@RequestBody這樣的場景,
 * 請求參數無法使用@ApiImplicitParam注解進行描述的時候)
 * @ApiModelProperty:用在屬性上,描述響應類的屬性
 */


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

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



5.Swagger如何漢化:

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


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

1.首先我們應該找到我們所添加版本的swagger-ui.html然后在項目的resources文件下創建META-INF.resources文件;

2.其次復制jar包中的swagger-ui.htmlresources下所創建的META-INF.resources文件中;

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

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

/**
 * Created by dell on 2018/12/4.
 */
/* 用戶自定義Swagger漢化,可根據自己的需求去做進一步修改*/
window.SwaggerTranslator.learn({
    "Warning: Deprecated":"警告:已過時",
    "Implementation Notes":"實現備注",
    "Response Class":"響應類",
    "Status":"狀態",
    "Parameters":"參數",
    "Parameter":"參數",
    "Value":"值",
    "Description":"描述",
    "Parameter Type":"參數類型",
    "Data Type":"數據類型",
    "Response Messages":"響應消息",
    "HTTP Status Code":"HTTP狀態碼",
    "Reason":"原因",
    "Response Model":"響應模型",
    "Request URL":"請求URL",
    "Response Body":"響應體",
    "Response Code":"響應碼",
    "Response Headers":"響應頭",
    "Hide Response":"隱藏響應",
    "Headers":"頭",
    "Try it out!":"試一下!",
    "Show/Hide":"顯示/隱藏",
    "List Operations":"顯示操作",
    "Expand Operations":"展開操作",
    "Raw":"原始",
    "can't parse JSON.  Raw result":"無法解析JSON. 原始結果",
    "Example Value":"示例",
    "Click to set as parameter value":"點擊設置參數",
    "Model Schema":"模型架構",
    "Model":"模型",
    "apply":"應用",
    "Username":"用戶名",
    "Password":"密碼",
    "Terms of service":"服務條款",
    "Created by":"創建者",
    "See more at":"查看更多:",
    "Contact the developer":"聯系開發者",
    "api version":"api版本",
    "Response Content Type":"響應Content Type",
    "Parameter content type:":"參數類型:",
    "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.":"無法從服務器讀取。可能沒有正確設置access-control-origin。",
    "Please specify the protocol for":"請指定協議:",
    "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":"服務器返回"
});
translator.js為國際化的意思,此js如果不引用的話是會造成漢化失敗的!!!
  <!--國際化操作:選擇中文版 -->
    <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代碼網上有很多地方可以參考,大家可根據自己的需求進行進一步的修改(懶人的話直接copy使用也問題不大哈,當然一定要記得在html文件中引入我們所創建的js文件)。其實漢化的過程并不復雜說白了也就是去替換原來jar包的代碼,當然不進行漢化的話也是無傷大雅的,具體還是看個人喜好。以上的話只是屬于一個簡單的demo,如果說你是用的是2.8版本的話那么漢化的過程跟2.8以下版本也是有所區別的。(初寫筆記,若有不對的地方還歡迎各位前輩糾正 萬分感謝!!)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,837評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,196評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,688評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,654評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,456評論 6 406
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,955評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,044評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,195評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,725評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,608評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,802評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,318評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,048評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,422評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,673評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,424評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,762評論 2 372

推薦閱讀更多精彩內容

  • 引入 swagger 依賴關系 swagger 配置 swagger2 整合成功。訪問地址 http://loca...
    EricDD閱讀 2,075評論 0 2
  • 1. pom.xml文件中引入依賴 2. 創建swagger配置類 啟動項目 訪問ui地址 http://loca...
    東方舵手閱讀 2,585評論 0 0
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,781評論 18 139
  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網絡請求組件 FMDB本地數據庫組件 SD...
    陽明先生_X自主閱讀 16,000評論 3 119
  • 會不會管理老板,是月薪5千和月薪5萬的主要區別_ Connie LinkedIn 一定要把老板的期望搞清楚,以免用...
    戰敭閱讀 243評論 0 2