Swagger以及knife4j的基本使用

来源:https://www.cnblogs.com/prosperous-ending-0925/archive/2022/08/22/16612462.html
-Advertisement-
Play Games

Swagger以及knife4j基本使用 Swagger 介紹: 官網:https://swagger.io/ Swagger 是一個規範和完整的框架,用於生成、描述、調用和可視化RESTful風格的 Web 服務 Restful 面向資源 RESTful是一種架構的規範與約束、原則,符合這種規範的 ...


Swagger以及knife4j基本使用

目錄


Swagger 介紹:

官網:https://swagger.io/

Swagger 是一個規範和完整的框架,用於生成、描述、調用和可視化RESTful風格的 Web 服務


Restful 面向資源

RESTful是一種架構的規範與約束、原則,符合這種規範的架構就是RESTful架構

Rest是web服務的一種架構風格;使用HTTP,URI,XML,JSON,HTML等廣泛流行的標準和協議;輕量級,跨平臺,跨語言的架構設計,它是一種設計風格,不是一種標準,是一種思想。


說明:

http方法 資源操作 冪等 安全
GET SELECT
POST INSERT
PUT UPDATE
DELETE DELETE

冪等性:對同一REST介面多次訪問,得到的資源狀態是相同的

安全性:對該REST介面訪問,不會使服務端資源狀態發生改變


優點:

  • 透明性 --暴露資源存在(資源操作通過http本身語義進行描述,不用單獨描述)

  • 充分利用HTTP協議本身語義

  • 無狀態 --在調用一個介面時可以不用考慮上下文,不用考慮當前狀態降低了複雜度

  • HTTP本身提供了豐富的內容協商手段(緩存,資源修改的樂觀併發控制等可以通過與業務無關的中間件實現)


SpringBoot使用swagger

  1. 導入依賴
  • 2版本
<!--swagger依賴-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!--swagger ui-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
  • 3.0版本
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>

  1. 編寫swagger配置文件
@Configuration
@EnableSwagger2  //開啟Swagger2
public class Swagger2Config {
    /**
     * 創建API應用
     * apiInfo() 增加API相關信息
     * 通過select()函數返回一個ApiSelectorBuilder實例,用來控制哪些介面暴露給Swagger來展現,
     * 指定掃描的包路徑來定義指定要建立API的目錄。
     * @return
     */
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(adminApiInfo())
                 //.enable(false) //enable是否啟動Swagger 如果為false,則swagger不能在瀏覽器中訪問
                .groupName("adminApi")
                .select()
                //RequestHandlerSelectors 配置要掃描介面的方式
                //basePackage: 指定要掃描的包
                //any():掃描全部
                //none()不掃描
                //withClassAnnotation: 掃描類上的註解,參數為一個註解的反射對象
                //withMethodeAnnotation: 掃描方法上的註解
                .apis(RequestHandlerSelectors.basePackage("com.example.swagger.controller"))
                //只顯示admin下麵的路徑
                .paths(Predicates.and(PathSelectors.regex("/admin/.*")))
                .build();
    }

    private ApiInfo adminApiInfo(){
        return new ApiInfoBuilder()
                .title("api文檔")
                .description("系統介面描述")
                .version("1.0")
                //作者信息
                .contact(new Contact("張三","http://baidu.com","[email protected]"))
                .build();
    }
}

  1. 編寫介面請求並運行

訪問方式(本地):http://localhost:8080/swagger-ui.html


使用:

  • 實體類:

    • @ApiModel("用戶實體類")
      public class User{
      
          @ApiModelProperty("用戶名")
          public String username;
      }
      
  • 介面方法,參數:

    • @RestController
      public class UserController{
          
          @ApiOperation("User控制類")
          @GetMapping(value="/user")
          public String getUser(@ApiParam("用戶名")String username){
          return "名字為:"+username;
      } 
      }
      

常用註解:

@Api:修飾整個類,描述Controller的作用,放在類上

@ApiOperation:描述一個類的一個方法,或者說一個介面

@ApiParam:單個參數描述

@ApiModel:用對象來接收參數

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

@ApiResponses:HTTP響應整體描述

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

@ApiIgnore:使用該註解忽略這個API

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

@ApiImplicitParams:描述由多個 @ApiImplicitParam 註解的參數組成的請求參數列表

@ApiImplicitParam:描述一個請求參數,可以配置參數的中文含義,還可以給參數設置預設值
//eg:
    @ApiImplicitParam(name="username",value="用戶名",required=true)


Knife4j --Swagger增強工具

使用Knife4j2.06以上版本,springboot版本必須大於等於2.2.x


作用

  • 可以搜索介面名稱快速定位介面(搜索功能)

  • 可以下載markdown、HTML、word 等格式文件(下載功能)

  1. 引入依賴
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-spring-boot-starter</artifactId>
    <version>2.0.9</version>
</dependency>
  1. 添加SwaggerConfiguration作為Swagger2的配置類
@Configuration
@EnableSwagger2
@EnableKnife4j
//@EnableSwagger2WebMvc 2.6以上報空指針異常則需要添加
@Import(BeanValidatorPluginsConfiguration.class)
public class SwaggerConfiguration {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)      // 選擇swagger2版本
                .apiInfo(apiInfo())         //定義api文檔彙總信息
                .select()
                .apis(RequestHandlerSelectors
                        .basePackage("com.example"))  // 指定生成api文檔的包
                .paths(PathSelectors.any())     // 指定所有路徑
                .build();
    }

    /**
     * 構建文檔api信息
     *
     * @return
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("")     // 文檔標題
                .contact(new Contact("", "", ""))   //聯繫人信息
                .description("")      //描述
                .version("1.0.1")     //文檔版本號
                .termsOfServiceUrl("")     //網站地址
                .build();
    }
}
  1. 實現生產環境關閉文檔資源
spring: 
  profiles: prod #指定環境
knife4j:
   production: true #開啟屏蔽文檔資源
  1. 實現介面排序
  • 針對不同Controller排序:Controller上標註@ApiSupport(order = 序號)
  • 針對同一個Controller中的不同方法排序:同一個Controller不同介面方法上標註@ApiOperationSupport(order = 序號)

註:更多詳細配置可查看CSDN博主:swagger文檔增強工具knife4j使用詳解_baobao555#的博客-CSDN博客_knife4j swagger


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

-Advertisement-
Play Games
更多相關文章
  • “談談常用的分散式ID設計方案”! 一個工作了7年的同學,被問到了這樣一個問題。 問題並不難,但是在實際面試的時候,如果只是回答1,2,3 很難通過面試,因為作為一個高級程式員,還需要有自己的理解和思考。 大家好,我是Mic,一個工作了14年的Java程式員。 這個問題的高手回答,我整理到了15W字 ...
  • 二、流程式控制制 1、用戶交互Scanner java.util.Scanner是Java5的新特性,我們可以通過Scanner類來獲取用戶輸入。 基本語法: Scanner s = new Scanner(System.in); 通過Scanner類的net()與nextLine()方法獲取輸入的字元 ...
  • 1、insert 標簽 1.1 獲取SqlSessionFactory 對象的通用方法 方便後面分測試; //獲取SqlSessionFactory 對象的通用方法 public SqlSessionFactory getSqlSessionFactory() throws IOException ...
  • Base 64 不屬於密碼技術,僅是編碼方式。但由於在 Java、JavaScript、區塊鏈等出現的頻率較高,故在本系列文章中首先分享 Base 64 編碼技術。前面部分主要介紹 Base 64 理論性的內容,如果只看在 Java(SpringBoot)或 JS(Vue)中的實現,可以直接跳到最後... ...
  • Docker安裝 卸載舊版本 較舊的 Docker 版本稱為 docker 或 docker-engine 。如果已安裝這些程式,請卸載它們以及相關的依賴項。 yum remove docker \ docker-client \ docker-client-latest \ docker-comm ...
  • 筆記記錄 B站狂神說Java的ElasticSearch課程:https://www.bilibili.com/video/BV17a4y1x7zq 一、ElasticSearch概述 官網:https://www.elastic.co/cn/downloads/elasticsearch Elat ...
  • 前言 嗨嘍,大家好呀~這裡是愛看美女的茜茜吶 我們在做採集數據的時候,過快或者訪問頻繁,或者一訪問就給彈出驗證碼,然後就蚌珠了~ 那麼今天!博主就給大家來一個簡單處理驗證碼的方法 環境模塊 Python和pycharm如果還有小伙伴沒安裝的話,可以在文章最下方掃碼獲取安裝包。 這裡需要用到一個 dd ...
  • 前期需要儲備的知識點 併發 看起來同時運行的就可以稱之為併發,其實內部是做了0.1秒A,做了0.1秒B,交替進行運作,看起來像是一起運作的。 並行 真正意義上的同時執行 補充 1.並行肯定算是併發 2.單核的電腦肯定不能實現並行,但是可以實現併發!! 3.我們這裡的單核是假設就是一個核,幹活的就一 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...