最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot集成Knife4j/Swagger:接口文檔自動生成,告別手寫API文檔

 更新時間:2026年03月30日 10:06:48   作者:翹著二郎腿的程序猿  
本文將詳細講解SpringBoot如何快速集成Knife4j/Swagger,從環(huán)境搭建、基礎配置、接口注解使用,到進階優(yōu)化,全程附完整代碼示例,感興趣的朋友跟隨小編一起看看吧

作為后端開發(fā)者,接口文檔編寫是繞不開的工作——既要保證文檔的準確性、完整性,又要及時同步接口變更,手動編寫不僅耗時耗力,還容易出現(xiàn)“接口與文檔不一致”的問題,給前后端聯(lián)調帶來極大困擾。

而Swagger正是解決這一痛點的利器,它能自動掃描項目中的接口,生成標準化的API文檔,支持在線調試、接口描述、參數(shù)校驗等功能;而Knife4j則是Swagger的增強版,基于Swagger封裝,優(yōu)化了UI界面,增加了更多實用功能(如接口排序、導出文檔、接口加密等),更貼合國內開發(fā)者的使用習慣。

本文將詳細講解SpringBoot如何快速集成Knife4j/Swagger,從環(huán)境搭建、基礎配置、接口注解使用,到進階優(yōu)化,全程附完整代碼示例,新手也能快速上手,徹底告別手寫API文檔的煩惱!

一、核心優(yōu)勢:為什么選擇Knife4j而非原生Swagger?

原生Swagger功能足夠基礎,但UI界面簡陋、交互體驗一般,而Knife4j作為增強版,完美解決了這些問題,核心優(yōu)勢如下:

  • UI更美觀,交互更友好:替換原生Swagger的簡陋界面,采用現(xiàn)代化設計,支持接口搜索、分類、排序,操作更流暢。
  • 功能更強大:支持接口文檔導出(PDF/Markdown/HTML)、接口調試參數(shù)記憶、接口加密、全局參數(shù)配置等原生Swagger沒有的功能。
  • 配置更簡潔:基于SpringBoot自動配置,無需復雜XML配置,幾行代碼即可完成集成。
  • 兼容性更好:完美兼容SpringBoot 2.x、3.x版本,支持JDK8及以上,適配主流的Spring全家桶。

簡單來說:Knife4j = Swagger + 更優(yōu)UI + 更多實用功能,是SpringBoot項目接口文檔的首選方案。

二、環(huán)境準備

本次集成基于以下環(huán)境,其他版本可靈活適配(文末附版本兼容說明):

  • SpringBoot版本:2.7.10(兼容2.x、3.x,3.x配置略有差異,下文會說明)
  • Knife4j版本:4.5.0(最新穩(wěn)定版)
  • JDK版本:1.8及以上
  • 開發(fā)工具:IDEA

三、SpringBoot集成Knife4j/Swagger(步驟詳解)

集成過程分為3步:添加依賴 → 編寫配置類 → 接口添加注解,全程無復雜操作,直接復制代碼即可。

步驟1:添加Maven依賴

在pom.xml中添加Knife4j的依賴,無需額外添加Swagger依賴(Knife4j已內置Swagger核心依賴,避免版本沖突)。

<!-- Knife4j Swagger 增強版依賴 -->
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-spring-boot-starter</artifactId>
    <version>4.5.0</version>
</dependency>
<!-- 若使用SpringBoot 3.x,需替換為以下依賴(適配Jakarta EE) -->
<!-- <dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-spring-boot-starter</artifactId>
    <version>4.5.0</version>
    <exclusions>
        <exclusion>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
        </exclusion>
    </exclusions>
</dependency> -->

注意:SpringBoot 3.x版本需排除javax.servlet-api依賴,因為3.x已使用Jakarta EE的jakarta.servlet-api,避免依賴沖突。

步驟2:編寫Swagger配置類

創(chuàng)建一個配置類,用于配置Swagger的基礎信息(如文檔標題、作者、版本)、掃描的接口包、全局參數(shù)等。該類需添加@Configuration注解,注入Docket實例。

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.oas.annotations.EnableOpenApi;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
/**
 * Knife4j/Swagger 配置類
 */
@Configuration
@EnableOpenApi // 開啟Swagger文檔(SpringBoot 3.x無需額外添加,2.x需添加)
public class SwaggerConfig {
    /**
     * 配置Docket實例,指定接口文檔的基本信息和掃描規(guī)則
     */
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.OAS_30) // OAS_30對應Swagger3.0規(guī)范,推薦使用
                .apiInfo(apiInfo()) // 配置文檔基礎信息
                .select()
                // 掃描指定包下的接口(替換為你的接口所在包路徑)
                .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller"))
                // 掃描所有接口(不推薦,建議指定包)
                // .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any()) // 匹配所有接口路徑
                .build();
    }
    /**
     * 配置文檔的基礎信息(標題、作者、版本、描述等)
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("SpringBoot + Knife4j/Swagger 接口文檔") // 文檔標題
                .description("本文檔用于前后端聯(lián)調,自動生成接口信息,無需手寫") // 文檔描述
                .contact(new Contact("開發(fā)者", "https://blog.csdn.net", "xxx@163.com")) // 作者信息(姓名、博客地址、郵箱)
                .version("1.0.0") // 文檔版本
                .build();
    }
}

關鍵說明:

  • @EnableOpenApi:開啟Swagger文檔功能,SpringBoot 2.x必須添加,3.x版本可省略(Knife4j自動開啟)。
  • basePackage:必須替換為你項目中Controller所在的包路徑,否則Swagger無法掃描到接口。
  • DocumentationType.OAS_30:使用Swagger3.0規(guī)范,是目前的主流版本,兼容Knife4j的所有功能。

步驟3:接口添加Swagger注解(核心)

Swagger通過注解識別接口信息,為Controller、接口方法、參數(shù)添加注解,即可自動生成詳細的接口文檔。以下是常用注解及示例:

常用注解說明

注解作用范圍說明
@ApiController類描述Controller的作用(如“用戶管理接口”)
@ApiOperation接口方法描述接口的功能(如“查詢用戶列表”)
@ApiParam接口參數(shù)描述參數(shù)的含義、是否必填、默認值等
@ApiModel實體類描述實體類的作用(如“用戶實體”)
@ApiModelProperty實體類字段描述字段的含義、數(shù)據(jù)類型、是否必填等
@ApiIgnoreController/方法/參數(shù)忽略該接口/參數(shù),不生成到文檔中

實戰(zhàn)示例(Controller + 實體類)

首先創(chuàng)建實體類(User),添加@ApiModel和@ApiModelProperty注解:

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * 用戶實體類
 */
@Data
@ApiModel(value = "User", description = "用戶實體")
public class User {
    @ApiModelProperty(value = "用戶ID", example = "1", required = false)
    private Long id;
    @ApiModelProperty(value = "用戶名", example = "zhangsan", required = true)
    private String username;
    @ApiModelProperty(value = "用戶密碼", example = "123456", required = true)
    private String password;
    @ApiModelProperty(value = "用戶年齡", example = "20", required = false)
    private Integer age;
}

然后創(chuàng)建Controller,添加@Api、@ApiOperation、@ApiParam注解:

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
/**
 * 用戶管理接口
 */
@RestController
@RequestMapping("/user")
@Api(tags = "用戶管理接口", description = "提供用戶的增刪改查操作")
public class UserController {
    // 模擬數(shù)據(jù)庫數(shù)據(jù)
    private static final List<User> userList = new ArrayList<>();
    static {
        userList.add(new User(1L, "zhangsan", "123456", 20));
        userList.add(new User(2L, "lisi", "654321", 22));
    }
    /**
     * 查詢所有用戶
     */
    @GetMapping("/list")
    @ApiOperation(value = "查詢用戶列表", notes = "獲取所有用戶的詳細信息")
    public List<User> getUserList() {
        return userList;
    }
    /**
     * 根據(jù)ID查詢用戶
     */
    @GetMapping("/{id}")
    @ApiOperation(value = "根據(jù)ID查詢用戶", notes = "傳入用戶ID,獲取單個用戶信息")
    public User getUserById(@ApiParam(value = "用戶ID", required = true, example = "1") @PathVariable Long id) {
        return userList.stream().filter(user -> user.getId().equals(id)).findFirst().orElse(null);
    }
    /**
     * 添加用戶
     */
    @PostMapping("/add")
    @ApiOperation(value = "添加用戶", notes = "傳入用戶信息,新增用戶")
    public String addUser(@ApiParam(value = "用戶信息", required = true) @RequestBody User user) {
        userList.add(user);
        return "添加成功";
    }
    /**
     * 修改用戶
     */
    @PutMapping("/update")
    @ApiOperation(value = "修改用戶", notes = "傳入用戶ID和新信息,修改用戶")
    public String updateUser(@ApiParam(value = "用戶信息", required = true) @RequestBody User user) {
        userList.replaceAll(u -> u.getId().equals(user.getId()) ? user : u);
        return "修改成功";
    }
    /**
     * 刪除用戶
     */
    @DeleteMapping("/{id}")
    @ApiOperation(value = "刪除用戶", notes = "傳入用戶ID,刪除指定用戶")
    public String deleteUser(@ApiParam(value = "用戶ID", required = true, example = "1") @PathVariable Long id) {
        userList.removeIf(user -> user.getId().equals(id));
        return "刪除成功";
    }
}

四、啟動項目,訪問Knife4j文檔

  • 啟動SpringBoot項目,確保項目無報錯;
  • 訪問Knife4j文檔地址(默認地址,無需修改):
http://localhost:8080/doc.html

(注:若項目配置了server.port,需替換為你的端口號;若配置了上下文路徑,需添加上下文路徑,如http://localhost:8080/demo/doc.html)

文檔界面說明

訪問成功后,將看到Knife4j的可視化界面,主要分為3個部分:

  • 左側:接口分類(按Controller分組),可搜索、折疊接口;
  • 中間:接口詳情(請求方式、參數(shù)、返回值、示例等);
  • 右側:在線調試(可直接填寫參數(shù),發(fā)送請求,查看響應結果,無需借助Postman)。

核心功能:

  • 在線調試:填寫參數(shù)后,點擊“發(fā)送”即可測試接口,支持GET、POST、PUT、DELETE等所有請求方式;
  • 文檔導出:點擊界面頂部“導出”按鈕,可導出PDF、Markdown、HTML格式的接口文檔,方便離線查看;
  • 參數(shù)校驗:接口參數(shù)的必填項、示例值會自動顯示,減少前后端聯(lián)調的溝通成本。

五、進階配置(優(yōu)化體驗,避坑指南)

以下配置可根據(jù)項目需求選擇性添加,進一步優(yōu)化Knife4j/Swagger的使用體驗,避免常見坑。

1. 全局參數(shù)配置(如Token、Authorization)

若項目接口需要登錄認證(如Token),可在配置類中添加全局參數(shù),無需在每個接口單獨添加:

// 在SwaggerConfig的createRestApi方法中添加
.addGlobalParameters(Collections.singletonList(
        new ParameterBuilder()
                .name("Authorization") // 參數(shù)名
                .description("令牌(格式:Bearer token)") // 參數(shù)描述
                .in(ParameterType.HEADER) // 參數(shù)位置(HEADER/QUERY/PATH)
                .required(false) // 是否必填(根據(jù)項目需求調整)
                .schema(new Schema<String>().type("string"))
                .build()
))

2. 忽略指定接口/路徑

若某些接口(如登錄接口、錯誤頁接口)不需要生成文檔,可通過以下方式忽略:

  • 方式1:在接口方法上添加@ApiIgnore注解;
  • 方式2:在配置類中通過paths過濾:
// 排除/login和/error接口
.paths(PathSelectors.regex("^(?!/login|/error).*$"))

3. 解決SpringBoot 2.6.x+ 版本沖突問題

SpringBoot 2.6.x及以上版本,默認的路徑匹配策略發(fā)生變化,會導致Swagger啟動報錯,需在application.yml中添加以下配置:

spring:
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher

4. 生產(chǎn)環(huán)境關閉Swagger文檔

Swagger文檔僅用于開發(fā)和測試環(huán)境,生產(chǎn)環(huán)境需關閉,避免接口暴露帶來安全風險??赏ㄟ^配置文件控制:

# application-dev.yml(開發(fā)環(huán)境,開啟)
knife4j:
  enable: true
# application-prod.yml(生產(chǎn)環(huán)境,關閉)
knife4j:
  enable: false

同時,在配置類中添加條件注解,根據(jù)環(huán)境動態(tài)開啟/關閉:

@Configuration
@EnableOpenApi
@ConditionalOnProperty(prefix = "knife4j", name = "enable", havingValue = "true")
public class SwaggerConfig {
    // 配置內容不變
}

六、常見問題與解決方案

  • 問題1:啟動項目后,訪問/doc.html報404
    • 解決方案:1. 檢查Controller包路徑是否配置正確(basePackage);2. 檢查Knife4j依賴是否添加成功;3. 若使用SpringBoot 2.6.x+,檢查是否添加了路徑匹配策略配置。
  • 問題2:接口文檔中沒有顯示實體類參數(shù)
    • 解決方案:確保實體類添加了@ApiModel和@ApiModelProperty注解,且接口參數(shù)使用@RequestBody接收實體類。
  • 問題3:SpringBoot 3.x啟動報錯,提示javax.servlet相關錯誤
    • 解決方案:排除Knife4j依賴中的javax.servlet-api,使用Jakarta EE的依賴(參考步驟1的依賴配置)。
  • 問題4:在線調試時,響應結果亂碼

解決方案:在application.yml中配置字符編碼:
spring: http: encoding: charset: UTF-8 force: true

七、總結

SpringBoot集成Knife4j/Swagger,僅需3步即可實現(xiàn)接口文檔的自動生成,徹底告別手寫文檔的繁瑣工作,大幅提升前后端聯(lián)調效率。

本文從基礎集成、注解使用,到進階配置、避坑指南,覆蓋了開發(fā)中常用的所有場景,新手可直接復制代碼上手,資深開發(fā)者可根據(jù)項目需求進行個性化配置。

核心要點:

  • Knife4j是Swagger的增強版,UI更友好、功能更強大;
  • 核心是通過注解(@Api、@ApiOperation等)描述接口信息,Swagger自動掃描生成文檔;
  • 生產(chǎn)環(huán)境必須關閉Swagger,避免安全風險;
  • SpringBoot 2.x和3.x配置略有差異,需注意依賴和注解的適配。

掌握Knife4j/Swagger的使用,能讓后端開發(fā)者從繁瑣的文檔編寫中解放出來,專注于核心業(yè)務邏輯開發(fā),提升整體開發(fā)效率。趕緊動手集成到你的SpringBoot項目中吧!

到此這篇關于SpringBoot集成Knife4j/Swagger:接口文檔自動生成,告別手寫API文檔的文章就介紹到這了,更多相關SpringBoot集成Knife4j/Swagger內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java實現(xiàn)富文本轉markdown

    Java實現(xiàn)富文本轉markdown

    這篇文章主要為大家詳細介紹了如何通過Java實現(xiàn)富文本轉markdown功能,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考下
    2023-12-12
  • Java實現(xiàn)微信小程序加密數(shù)據(jù)解密算法

    Java實現(xiàn)微信小程序加密數(shù)據(jù)解密算法

    我們開發(fā)微信小程序的過程中,我們的服務端有時需要獲取微信提供的開放數(shù)據(jù)。微信會對這些開放數(shù)據(jù)做簽名和加密處理,本文通過實例代碼給大家介紹Java實現(xiàn)微信小程序加密數(shù)據(jù)解密算法,感興趣的朋友一起看看吧
    2021-11-11
  • spring boot攔截器實現(xiàn)IP黑名單實例代碼

    spring boot攔截器實現(xiàn)IP黑名單實例代碼

    本篇文章主要介紹了spring boot攔截器實現(xiàn)IP黑名單實例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Java工具類DateUtils實例詳解

    Java工具類DateUtils實例詳解

    這篇文章主要為大家詳細介紹了Java工具類DateUtils實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Spring Security如何使用URL地址進行權限控制

    Spring Security如何使用URL地址進行權限控制

    這篇文章主要介紹了Spring Security如何使用URL地址進行權限控制,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • Java動態(tài)代理簡單介紹

    Java動態(tài)代理簡單介紹

    動態(tài)代理指的是,代理類和目標類的關系在程序運行的時候確定的,客戶通過代理類來調用目標對象的方法,是在程序運行時根據(jù)需要動態(tài)的創(chuàng)建目標類的代理對象。本文將通過案例詳細講解一下Java動態(tài)代理的原理及實現(xiàn),需要的可以參考一下
    2022-08-08
  • JavaMail整合Spring實現(xiàn)郵件發(fā)送功能

    JavaMail整合Spring實現(xiàn)郵件發(fā)送功能

    這篇文章主要為大家詳細介紹了JavaMail整合Spring實現(xiàn)郵件發(fā)送功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • springboot-mysql-HikariCP集成過程

    springboot-mysql-HikariCP集成過程

    HiKariCP opens new window是數(shù)據(jù)庫連接池的一個后起之秀,號稱性能最好,可以完美地 PK 掉其他連接池,這篇文章主要介紹了springboot-mysql-HikariCP集成過程,需要的朋友可以參考下
    2023-07-07
  • Java三大特性之封裝詳解

    Java三大特性之封裝詳解

    面向對象編程語言是對客觀世界的模擬,客觀世界里成員變量都是隱藏在對象內部的,外界無法直接操作和修改。?封裝可以被認為是一個保護屏障,防止該類的代碼和數(shù)據(jù)被其他類隨意訪問。本文將來和大家詳細說說Java中的封裝,需要的可以了解一下
    2022-10-10
  • 你可能真沒用過這些 IDEA 插件(建議收藏)

    你可能真沒用過這些 IDEA 插件(建議收藏)

    IDEA 全稱 IntelliJ IDEA,是java編程語言開發(fā)的集成環(huán)境。IntelliJ在業(yè)界被公認為最好的java開發(fā)工具。這篇文章主要介紹 IDEA 必用插件的安裝及用法,需要的朋友可以參考下
    2020-08-08

最新評論

柳州市| 绍兴县| 晋宁县| 双牌县| 隆化县| 灌南县| 楚雄市| 楚雄市| 应用必备| 侯马市| 保定市| 丹棱县| 大埔县| 白城市| 麻江县| 苏州市| 台安县| 宣汉县| 中西区| 英山县| 科技| 柳江县| 高雄市| 河南省| 罗江县| 桦南县| 大冶市| 隆安县| 南岸区| 深圳市| 浦北县| 临夏市| 五家渠市| 安庆市| 台湾省| 堆龙德庆县| 汤原县| 卓资县| 南开区| 子长县| 钟山县|