SpringBoot中優雅的使用Swagger2

来源:https://www.cnblogs.com/flyingDragon/archive/2020/07/05/13252137.html
-Advertisement-
Play Games

前言 Spring Boot 框架是目前非常流行的微服務框架,我們很多情況下使用它來提供 Rest API。而對於 Rest API 來說很重要的一部分內容就是文檔,Swagger 為我們提供了一套通過代碼和註解自動生成文檔的方法,這一點對於保證 API 文檔的及時性將有很大的幫助。本文將使用 Sw ...


前言

  Spring Boot 框架是目前非常流行的微服務框架,我們很多情況下使用它來提供 Rest API。而對於 Rest API 來說很重要的一部分內容就是文檔,Swagger 為我們提供了一套通過代碼和註解自動生成文檔的方法,這一點對於保證 API 文檔的及時性將有很大的幫助。本文將使用 Swagger 2 規範的 Springfox 實現來瞭解如何在 Spring Boot 項目中使用 Swagger,主要包含瞭如何使用 Swagger 自動生成文檔、使用 Swagger 文檔以及 Swagger 相關的一些高級配置和註解。

Swagger 簡介

Swagger 是一套基於 OpenAPI 規範構建的開源工具,可以幫助我們設計、構建、記錄以及使用 Rest API。Swagger 主要包含了以下三個部分:

  1. Swagger Editor:基於瀏覽器的編輯器,我們可以使用它編寫我們 OpenAPI 規範。

  2. Swagger UI:它會將我們編寫的 OpenAPI 規範呈現為互動式的 API 文檔,後文我將使用瀏覽器來查看並且操作我們的 Rest API。

  3. Swagger Codegen:它可以通過為 OpenAPI(以前稱為 Swagger)規範定義的任何 API 生成伺服器存根和客戶端 SDK 來簡化構建過程。

為什麼要使用 Swagger

當下很多公司都採取前後端分離的開發模式,前端和後端的工作由不同的工程師完成。在這種開發模式下,維持一份及時更新且完整的 Rest API 文檔將會極大的提高我們的工作效率。傳統意義上的文檔都是後端開發人員手動編寫的,相信大家也都知道這種方式很難保證文檔的及時性,這種文檔久而久之也就會失去其參考意義,反而還會加大我們的溝通成本。而 Swagger 給我們提供了一個全新的維護 API 文檔的方式,下麵我們就來瞭解一下它的優點:

  1. 代碼變,文檔變。只需要少量的註解,Swagger 就可以根據代碼自動生成 API 文檔,很好的保證了文檔的時效性。

  2. 跨語言性,支持 40 多種語言。

  3. Swagger UI 呈現出來的是一份可互動式的 API 文檔,我們可以直接在文檔頁面嘗試 API 的調用,省去了準備複雜的調用參數的過程。

  4. 還可以將文檔規範導入相關的工具(例如 SoapUI), 這些工具將會為我們自動地創建自動化測試。

以上這些優點足以說明我們為什麼要使用 Swagger 了,您是否已經對 Swagger 產生了濃厚的興趣了呢?下麵我們就將一步一步地在 Spring Boot 項目中集成和使用 Swagger,讓我們從準備一個 Spring Boot 的 Web 項目開始吧。

SpringBoot整合Swagger2

  1. 首先創建一個基礎的SpringBoot web項目。您可以通過 Spring Initializr 頁面生成一個空的 Spring Boot 項目,或者通過idea創建一個SpringBoot項目

  2. 添加依賴

    1. Spring Boot 的 Web 依賴 
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
    2. 集成swagger2 
      <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.9.2</version>
      </dependency>
    3. 集成Swagger UI
      <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.9.2</version>
      </dependency>
  3. java中Swagger2配置-直接上配置代碼,Swagger2的配置是比較容易的,在成功項目創建之後,只需要開發者自己提供一個Docket的Bean。(註釋寫的很清楚,這裡就不一一解釋了。不懂的地方可以在片尾關註我公眾號加我WX。)

    /**
     * 集成swagger2  解決前後端分離 弊端:不能及時協商+今早解決的問題
     *      使用swagger總結:
     *          通過swagger 給一些比基奧難理解的介面或屬性,增加註釋信息
     *          介面文檔實時更新
     *          可以線上測試
     *      安全問題:
     *          正式上線的時候  記得關閉swagger
     */
    @Configuration//載入到springboot配置裡面
    @EnableSwagger2//開啟swagger2
    public class SwaggerConfig {
        /**
         * 配置swagger2
         * 註冊一個bean屬性
         * swagger2其實就是重新寫一個構造器,因為他沒有get set方法\
         * enable() 是否啟用swagger false swagger不能再瀏覽器中訪問
         * groupName()配置api文檔的分組  那就註冊多個Docket實例 相當於多個分組
         * @return
         */
        @Bean
        public Docket docket() {
    ​
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .groupName("XXX")//組名稱
                    .enable(true)
                    .select()
                    /**
                     * RequestHandlerSelectors配置掃描介面的方式
                     *      basePackage 配置要掃描的包
                     *      any 掃描全部
                     *      none 不掃描
                     *      withClassAnnotation 掃描類上的註解
                     *      withMethodAnnotation 掃描方法上的註解
                     */
                    .apis(RequestHandlerSelectors.basePackage("com.tinygray.madison.controller"))
                    /**
                     * paths() 掃描過濾方式
                     *      any過濾全部
                     *      none不過濾
                     *      regex正則過濾
                     *      ant過濾指定路徑
                     */
    //                .paths(PathSelectors.ant("/login/**"))
                    .build();
        }
    ​
        /**
         * 配置swagger2信息 =apiInfo
         * @return
         */
        public ApiInfo apiInfo(){
            /*作者信息*/
    //        Contact contact = new Contact("XXX", "http://baidu.com", "email");
            Contact contact = new Contact("", "", "");
            return new ApiInfo(
                    "XXX的API介面",
                    "company介面",
                    "V1.0",
                    "urn:toVs",
                    contact,
                    "Apache 2.0",
                    "http://www.apache.org/licenses/LICENSE-2.0",
                    new ArrayList());
        }
    ​
    }

     

  4. 編寫一些簡單的java介面。(你可以根據你的情況進行編寫)
    @Api(tags = "TestController測試")
    @RestController
    public class TestController {
        @ApiOperation("login api")
        @GetMapping("/")
        public String login() {
            return "Hello login ~";
        }
    ​
        @ApiOperation("helloWord Api")
        @GetMapping("/index")
        public String index() {
            return "Hello World ~";
        }
    ​
        @ApiOperation("admin Api")
        @GetMapping("/admin/hello")
        public String admin() {
            return "hello admin!";
        }
    ​
        @ApiOperation("user Api")
        @GetMapping("/user/hello")
        public String user() {
            return "hello user";
        }
    }
  5. 驗證代碼-到這裡我們已經成功集成Swagger2,然後啟動項目,輸入http://localhost:8080/swagger-ui.html,如果能出現下麵界面,說明配置成功了。
  6. 未完待續。下章節講解Swagger的常用註解。

    這篇文章是否幫助到你呢?掃描關註公眾號--【Madison龍少】,【Madison龍少】公眾號每天提供java乾貨,乾貨滿滿。


 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在“JavaScript圖形實例:SierPinski三角形” 和“JavaScript圖形實例:Levy曲線及其變形”等文章中我們介紹了通過遞歸生成分形圖形的方法。我們可以將繪製的分形圖形每隔一定的時間間隔後,增加遞歸深度重新繪製一次,這樣就可以得到分形圖形的動態生成效果。 1.SierPinsk ...
  • Nuxt 是 Vue 項目伺服器端渲染(SSR)解決方案。而在使用時,就會遇到前後端分離情況下的功能變數名稱或埠不一致導致的跨域問題。本文將介紹如何通過設置代理解決 Nuxt 與 axios 集成的跨域問題。 ...
  • Electron是一個可以使用 JavaScript,HTML 和 CSS 構建跨平臺桌面應用程式的開源框架。 本文主要分享一下採用vue + electron開發桌面程式的搭建過程。 1. 環境準備 這裡採用的是vue-cli3.x,可以通過下麵的指令查看當前vue-cli的版本: vue --v ...
  • #讀後感# 《企業IT架構轉型之道-阿裡巴巴中台戰略思想與架構實戰》鐘華(花名:古謙)編著,阿裡巴巴中間件首席架構師,15年中間件領域行業經驗。 進入新公司第一天,領導就給了這本書,慚愧,剛看完... 一本推動“中台建設”指導性實戰用書,濃縮了10來年的經驗,從架構層面詳細敘述阿裡共用業務事業部:技 ...
  • 抽象工廠模式 優化抽象工廠 非同步工廠 在學習抽象工廠模式前,先來回顧一下前面的簡單工廠和工廠方法模式。簡單工廠的職責非常簡單:構造某個實體類型,然後把實例作為抽象類型返回; 工廠方法模式則進一步抽象出一個抽象的創建者和一個抽象的產品類型,而實際的執行過程是具體工廠創建具體的產品類型,具體工廠和具體產 ...
  • 我的LeetCode:https://leetcode-cn.com/u/ituring/ 我的LeetCode刷題源碼[GitHub]:https://github.com/izhoujie/Algorithmcii LeetCode 題目 字元串有三種編輯操作:插入一個字元、刪除一個字元或者替換 ...
  • 問題來源: 在寫二叉樹序列化與反序列化時發現序列化函數為char* Serialize1(TreeNode *root) 其函數返回類型為char*,但是我在實現的過程中為了更方便的操作添加字元串使用的是C++中string類型的變數,這就導致我最後得到的結果res是string類型,若是要返回需要 ...
  • C#與python的迭代器比較: 迭代器 C# Python 一個對象可迭代,需要實現IEnumerable(表示對象可數),IEnumerable就是要實現一個IEnumerator(迭代對象)。 這樣的說法曾經一度讓我很迷,如果返回一個已實現的類似於數組array、列表list類型的IEnume ...
一周排行
    -Advertisement-
    Play Games
  • 1. 說明 /* Performs operations on System.String instances that contain file or directory path information. These operations are performed in a cross-pla ...
  • 視頻地址:【WebApi+Vue3從0到1搭建《許可權管理系統》系列視頻:搭建JWT系統鑒權-嗶哩嗶哩】 https://b23.tv/R6cOcDO qq群:801913255 一、在appsettings.json中設置鑒權屬性 /*jwt鑒權*/ "JwtSetting": { "Issuer" ...
  • 引言 集成測試可在包含應用支持基礎結構(如資料庫、文件系統和網路)的級別上確保應用組件功能正常。 ASP.NET Core 通過將單元測試框架與測試 Web 主機和記憶體中測試伺服器結合使用來支持集成測試。 簡介 集成測試與單元測試相比,能夠在更廣泛的級別上評估應用的組件,確認多個組件一起工作以生成預 ...
  • 在.NET Emit編程中,我們探討了運算操作指令的重要性和應用。這些指令包括各種數學運算、位操作和比較操作,能夠在動態生成的代碼中實現對數據的處理和操作。通過這些指令,開發人員可以靈活地進行算術運算、邏輯運算和比較操作,從而實現各種複雜的演算法和邏輯......本篇之後,將進入第七部分:實戰項目 ...
  • 前言 多表頭表格是一個常見的業務需求,然而WPF中卻沒有預設實現這個功能,得益於WPF強大的控制項模板設計,我們可以通過修改控制項模板的方式自己實現它。 一、需求分析 下圖為一個典型的統計表格,統計1-12月的數據。 此時我們有一個需求,需要將月份按季度劃分,以便能夠直觀地看到季度統計數據,以下為該需求 ...
  • 如何將 ASP.NET Core MVC 項目的視圖分離到另一個項目 在當下這個年代 SPA 已是主流,人們早已忘記了 MVC 以及 Razor 的故事。但是在某些場景下 SSR 還是有意想不到效果。比如某些靜態頁面,比如追求首屏載入速度的時候。最近在項目中回歸傳統效果還是不錯。 有的時候我們希望將 ...
  • System.AggregateException: 發生一個或多個錯誤。 > Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失敗。檢查輸出視窗瞭解更多詳細信息。 內部異常堆棧跟蹤的結尾 > (內部異常 #0) Microsoft ...
  • 引言 在上一章節我們實戰了在Asp.Net Core中的項目實戰,這一章節講解一下如何測試Asp.Net Core的中間件。 TestServer 還記得我們在集成測試中提供的TestServer嗎? TestServer 是由 Microsoft.AspNetCore.TestHost 包提供的。 ...
  • 在發現結果為真的WHEN子句時,CASE表達式的真假值判斷會終止,剩餘的WHEN子句會被忽略: CASE WHEN col_1 IN ('a', 'b') THEN '第一' WHEN col_1 IN ('a') THEN '第二' ELSE '其他' END 註意: 統一各分支返回的數據類型. ...
  • 在C#編程世界中,語法的精妙之處往往體現在那些看似微小卻極具影響力的符號與結構之中。其中,“_ =” 這一組合突然出現還真不知道什麼意思。本文將深入剖析“_ =” 的含義、工作原理及其在實際編程中的廣泛應用,揭示其作為C#語法奇兵的重要角色。 一、下劃線 _:神秘的棄元符號 下劃線 _ 在C#中並非 ...