精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

別再糾結 SpringFox!Spring Boot 3 親自推薦的文檔神器真香炸了

開發 前端 開發工具
本文將帶你深入了解 SpringDoc 的優勢、配置方法、常見用法,并結合 Spring Security 演示如何在接口文檔中接入 JWT 認證。

在 Spring Boot 項目中,接口文檔一直是開發者繞不開的話題。很多同學習慣使用 SpringFox,它曾經是 Swagger 在 Spring 生態下的首選實現,集成簡單,界面直觀。但自 2020 年起,SpringFox 停止了維護,并且在 Spring Boot 3 中完全無法兼容,這讓不少團隊在升級后面臨文檔組件“失效”的困境。

好消息是,Spring 官方社區已經推薦了一個更現代的替代品——SpringDoc。它基于 OpenAPI 3 規范,天然支持 Spring Boot 3,全棧覆蓋 WebMvc、WebFlux、Spring Native 等場景。更重要的是,配置比 SpringFox 少得多,功能卻更全面,界面交互依舊由 Swagger-UI 提供。換句話說,它就是 Spring 世界里的“新一代文檔神器”。

本文將帶你深入了解 SpringDoc 的優勢、配置方法、常見用法,并結合 Spring Security 演示如何在接口文檔中接入 JWT 認證。

SpringDoc 簡介

SpringDoc 是一個專為 Spring Boot 設計的 API 文檔生成器,它基于 OpenAPI 3 標準,可與 Spring WebMvc、Spring WebFlux 甚至 Native 模式無縫集成。

在 GitHub 上,SpringDoc 已經獲得 3.5K+ Star,更新活躍、社區響應快,逐漸成為 Spring Boot 官方推薦的 API 文檔方案。

架構上,SpringDoc 并沒有脫離 Swagger 體系,而是作為 OpenAPI 3 在 Spring 生態中的實現層:

  • 使用 Swagger-UI 渲染文檔界面;
  • 生成 符合 OpenAPI 3 標準的 API 定義文件
  • 提供更友好的配置能力。

簡單來說,它既延續了 Swagger 的使用習慣,又讓開發者能夠更快擁抱新標準。

SpringDoc 與 Swagger 的關系

很多人容易混淆這三者:

  • Swagger:最早的 API 規范標準,后來演化為 OpenAPI。
  • Swagger-UI:一個交互式 API 文檔展示工具,常見的“在線調試”功能就是它提供的。
  • SpringDoc:Spring 世界里的 OpenAPI 3 適配實現,底層仍依賴 Swagger-UI 做前端展示。

因此,可以把 SpringDoc 理解為 “Spring 生態里的 OpenAPI 3 解釋器”,它既與 Swagger 保持兼容,又解決了 Spring Boot 3 環境下的文檔適配問題。

SpringDoc 集成與配置

添加依賴

在 pom.xml 中加入以下依賴即可:

<!-- SpringDoc 依賴 -->
<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>${springdoc-openapi.version}</version>
</dependency>

添加配置

在 src/main/resources/application.yml 中配置:

springdoc:
  swagger-ui:
    path: /swagger-ui.html   # 修改 Swagger UI 路徑
    enabled: true            # 是否啟用 Swagger UI
  api-docs:
    path: /v3/api-docs       # API 文檔 JSON 地址
    enabled: true
  group-configs:
    - group: brand
      paths-to-match: /brand/**
      packages-to-scan: com.icoderoad.springdoc.controller
    - group: admin
      paths-to-match: /admin/**
      packages-to-scan: com.icoderoad.springdoc.controller
  default-flat-param-object: false

這樣就完成了基本的文檔配置。

SpringDoc 使用示例

配置文檔信息

在 src/main/java/com/icoderoad/config/SpringDocConfig.java 添加:

package com.icoderoad.config;


import io.swagger.v3.oas.models.ExternalDocumentation;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


/**
 * @author 
 * @description SpringDoc 基礎配置
 */
@Configuration
public class SpringDocConfig {


    @Bean
    public OpenAPI projectOpenAPI() {
        return new OpenAPI()
                .info(new Info().title("SpringDoc API")
                        .description("Spring Boot 3 集成 SpringDoc 的示例文檔")
                        .version("v1.0.0")
                        .license(new License().name("Apache 2.0")
                                .url("https://github.com/springdoc")))
                .externalDocs(new ExternalDocumentation()
                        .description("更多學習資料")
                        .url("https://springdoc.org"));
    }
}

 編寫 Controller 示例

src/main/java/com/icoderoad/controller/PmsBrandController.java

package com.icoderoad.controller;


import com.icoderoad.domain.PmsBrand;
import com.icoderoad.service.PmsBrandService;
import com.icoderoad.common.CommonResult;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;


import java.util.List;


@Tag(name = "PmsBrandController", description = "商品品牌管理")
@RestController
@RequestMapping("/brand")
public class PmsBrandController {


    @Autowired
    private PmsBrandService brandService;


    @Operation(summary = "獲取所有品牌列表", description = "需要登錄后訪問")
    @GetMapping("/listAll")
    public CommonResult<List<PmsBrand>> listAll() {
        return CommonResult.success(brandService.listAll());
    }


    @Operation(summary = "添加品牌")
    @PostMapping("/create")
    public CommonResult create(@RequestBody PmsBrand brand) {
        int count = brandService.create(brand);
        return count == 1 ? CommonResult.success(brand) : CommonResult.failed("操作失敗");
    }


    @Operation(summary = "更新指定 ID 的品牌信息")
    @PostMapping("/update/{id}")
    public CommonResult update(@PathVariable Long id, @RequestBody PmsBrand brand) {
        int count = brandService.update(id, brand);
        return count == 1 ? CommonResult.success(brand) : CommonResult.failed("操作失敗");
    }


    @Operation(summary = "刪除品牌")
    @GetMapping("/delete/{id}")
    public CommonResult delete(@PathVariable Long id) {
        int count = brandService.delete(id);
        return count == 1 ? CommonResult.success(null) : CommonResult.failed("操作失敗");
    }


    @Operation(summary = "分頁查詢品牌列表")
    @GetMapping("/list")
    public CommonResult<List<PmsBrand>> list(
            @RequestParam(defaultValue = "1") 
            @Parameter(description = "頁碼") Integer pageNum,
            @RequestParam(defaultValue = "3") 
            @Parameter(description = "每頁數量") Integer pageSize) {
        return CommonResult.success(brandService.list(pageNum, pageSize));
    }


    @Operation(summary = "獲取品牌詳情")
    @GetMapping("/{id}")
    public CommonResult<PmsBrand> detail(@PathVariable Long id) {
        return CommonResult.success(brandService.detail(id));
    }
}

在實體類中使用注解

src/main/java/com/icoderoad/domain/PmsBrand.java

package com.icoderoad.domain;


import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;


@Data
public class PmsBrand {
    private Long id;
    private String name;


    @Schema(title = "首字母")
    private String firstLetter;


    private Integer sort;


    @Schema(title = "是否為制造商:0->否;1->是")
    private Integer factoryStatus;


    private Integer showStatus;


    @Schema(title = "產品數量")
    private Integer productCount;


    @Schema(title = "評論數量")
    private Integer productCommentCount;


    @Schema(title = "品牌 Logo")
    private String logo;


    @Schema(title = "專區大圖")
    private String bigPic;


    @Schema(title = "品牌故事")
    private String brandStory;
}

結合 Spring Security 使用

在需要鑒權的場景下,可以在 OpenAPI 配置中加入 JWT 支持:

package com.icoderoad.config;


import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
public class SpringDocSecurityConfig {


    private static final String SECURITY_SCHEME_NAME = "Authorization";


    @Bean
    public OpenAPI secureOpenAPI() {
        return new OpenAPI()
                .info(new Info().title("SpringDoc 安全示例").version("v1.0.0"))
                .addSecurityItem(new SecurityRequirement().addList(SECURITY_SCHEME_NAME))
                .components(new Components()
                        .addSecuritySchemes(SECURITY_SCHEME_NAME,
                                new SecurityScheme()
                                        .name(SECURITY_SCHEME_NAME)
                                        .type(SecurityScheme.Type.HTTP)
                                        .scheme("bearer")
                                        .bearerFormat("JWT")));
    }
}

這樣,就能在文檔頁面里輸入 JWT Token 進行認證調試。

運行與測試

啟動項目后,訪問:

http://localhost:8088/swagger-ui.html
  • 先調用登錄接口,獲取 JWT token;
  • 點擊 Swagger-UI 頂部的認證按鈕,輸入 token(無需手動加 Bearer 前綴);
  • 之后就可以調試所有需要認證的 API 接口了。

如果未傳遞 token,會返回鑒權失敗的提示。

總結

在 Spring Boot 3 時代,SpringFox 已經不再適配,而 SpringDoc 則成為事實上的最佳替代方案

  • 輕量配置,幾乎開箱即用;
  • 支持 WebMvc / WebFlux / Native 等多種場景;
  • 結合 Spring Security,可以方便地調試 JWT 等安全方案;
  • 社區維護活躍,版本更新頻繁。

如果你還在為 SpringFox 的兼容性問題頭疼,不妨試試 SpringDoc,它完全能成為新項目的首選文檔解決方案。

項目地址: https://github.com/springdoc/springdoc-openapi


責任編輯:武曉燕 來源: 路條編程
相關推薦

2020-12-07 06:05:34

apidocyapiknife4j

2021-05-17 14:57:23

策略模式代碼

2022-03-04 15:19:59

Spring BooJavaVert.x

2025-10-29 01:45:00

toString()SpringJackson

2024-10-31 09:42:08

2022-08-24 13:25:20

微軟Python小白神器

2025-07-28 05:00:00

2025-06-04 02:10:00

2025-04-27 08:26:44

SpringJPA代碼

2025-08-04 01:55:00

2025-01-02 11:20:47

2020-07-15 16:50:57

Spring BootRedisJava

2025-09-29 01:33:00

Spring初始化Bean

2025-08-28 07:48:33

2023-03-27 09:50:16

RocketMQ中間件

2025-04-15 19:52:04

2020-06-29 11:35:02

Spring BootJava腳手架

2024-10-31 13:49:04

2023-10-08 10:37:48

springweb版本

2021-09-23 15:55:50

線程池語言公式
點贊
收藏

51CTO技術棧公眾號

精品一区二区三区毛片| 国产激情久久久| 免费的av网站| 视频在线日韩| 一区二区三区免费看视频| 国产乱码精品一区二区三区中文 | 日韩亚洲一区在线播放| 少妇久久久久久久| 午夜精品一区二区三区国产| 日韩视频一区二区三区| 缅甸午夜性猛交xxxx| 九色视频网站在线观看| 久久99久久久欧美国产| 欧美美最猛性xxxxxx| 插我舔内射18免费视频| 亚洲www免费| 亚洲免费观看高清在线观看| 国产一区福利视频| 久久精品99北条麻妃| 午夜激情久久| 亚洲美女又黄又爽在线观看| 日韩av片免费观看| 波多视频一区| 亚洲久草在线视频| 欧美成人蜜桃| 成人av手机在线| 日韩国产一区二| 欧美第一黄色网| 国产三级在线观看完整版| 草草视频在线一区二区| 色狠狠桃花综合| 日本a级片在线观看| 激情在线视频| 成人av在线观| 91精品国产自产在线| 在线观看精品国产| 综合在线视频| 最近2019中文免费高清视频观看www99 | 亚洲色图视频网站| 欧美日韩一区二区视频在线| 一级黄色录像大片| 久久综合九色| 97精品国产91久久久久久| 99成人在线观看| 精品国产aⅴ| 日韩高清免费在线| 久久黄色一级视频| 4438五月综合| 欧美日韩一区二区在线视频| 男人天堂网视频| 国产福利在线免费观看| 日韩毛片精品高清免费| 亚洲三区四区| 成人在线视频成人| 91色porny| 国产亚洲欧美一区二区| 精品久久久久成人码免费动漫| 日韩福利电影在线观看| 欧美专区在线视频| 国产无遮挡又黄又爽又色| 欧美在线亚洲| 久久亚洲欧美日韩精品专区 | 久久99国产精品久久99大师| 日韩欧美精品在线| 青娱乐国产精品视频| 偷拍自拍亚洲| 欧美精品aⅴ在线视频| 国产免费视频传媒| 成人在线网站| 欧洲日韩一区二区三区| 亚洲色成人一区二区三区小说| 久久青草伊人| 欧美午夜影院在线视频| 国产xxxxx在线观看| 自拍偷自拍亚洲精品被多人伦好爽| 欧美日韩在线第一页| 成人免费在线小视频| 日本不卡一二三| 欧美午夜在线一二页| 激情五月婷婷久久| 成人国产精品一区二区免费麻豆| 欧美主播一区二区三区| 久久99999| 成人av在线播放| 日韩亚洲欧美一区二区三区| 欧美午夜精品一区二区| 欧美高清视频看片在线观看| 精品亚洲va在线va天堂资源站| 免费看黄色aaaaaa 片| 久草成人资源| 久久九九国产精品怡红院| 人妻人人澡人人添人人爽| 欧美精品国产| 欧美在线性视频| 中文在线字幕免费观| 久久69国产一区二区蜜臀| 亚洲一区二区三区四区视频| 亚洲爱爱综合网| 91在线视频18| 色综合久久88色综合天天提莫| 精产国品自在线www| 亚洲永久精品大片| 日日碰狠狠添天天爽超碰97| 忘忧草在线www成人影院| 日韩一区二区在线观看视频| 欲求不满的岳中文字幕| 欧美偷拍综合| 欧美激情视频免费观看| 亚洲欧美一区二区三区在线观看| 美女网站视频久久| 国产精品二区二区三区| 国产在线视频资源| 一区二区三区中文字幕电影| 爱福利视频一区二区| 日本成人一区二区| 亚洲福利视频网| 日韩av网站在线播放| 黄色av一区| 国产精品网站视频| 成人午夜福利视频| 中文字幕av一区 二区| 隔壁人妻偷人bd中字| 456成人影院在线观看| 日韩视频免费观看高清完整版| 亚洲AV无码国产精品| 久久久久久久久国产一区| 97av在线播放| 国产色综合视频| 久久久精品欧美丰满| 国产激情片在线观看| 国产一区二区主播在线| 亚洲第一男人天堂| 欧美成人777| 丝袜美腿高跟呻吟高潮一区| 国产精品xxxx| 国产激情小视频在线| 欧美日韩亚洲一区二区三区| 久久发布国产伦子伦精品| 日本电影一区二区| 欧美专区第一页| 手机看片福利在线| 亚洲综合一二三区| 久久精品亚洲天堂| 日韩伦理一区| 国产suv精品一区二区| 丰满人妻一区二区三区无码av| 国产精品福利一区二区三区| 男人日女人bb视频| 欧美成人专区| 国语自产精品视频在线看| aa视频在线免费观看| 国产精品久久久久影视| 精品日韩久久久| 蜜臀av免费一区二区三区| 97精品免费视频| 人妻一区二区三区免费| 一区二区三区成人在线视频| 亚洲精品在线网址| 久久久久久久久久久久久久| 国产精品亚洲片夜色在线| 国产高清在线看| 91久久线看在观草草青青| 亚洲做受高潮无遮挡| 亚洲女同在线| 欧美性大战久久久久| 在线观看涩涩| 亚洲欧美制服另类日韩| 亚洲毛片一区二区三区| 欧美极品aⅴ影院| 无限资源日本好片| 久久国产精品亚洲人一区二区三区| 国产精品视频yy9099| 成全电影播放在线观看国语| 欧美三级电影网| 粉嫩av性色av蜜臀av网站| 狠狠色狠狠色综合| 欧美在线观看黄| www.神马久久| 538国产精品一区二区在线| 日夜干在线视频| 欧洲日韩一区二区三区| 欧美a级片免费看| 免费观看在线综合色| 日本亚洲导航| 另类中文字幕国产精品| 伊人一区二区三区久久精品| 中文字幕日韩国产| 欧美激情在线免费观看| 国产视频一区二区三区在线播放| 亚洲精品3区| 国产精品久久久久秋霞鲁丝| 黄色的网站在线观看| 欧美一区二区黄色| 欧美人妻一区二区| 成人一级黄色片| 九九九九免费视频| 精品无人区麻豆乱码久久久| 国产美女高潮久久白浆| 二区三区四区高清视频在线观看| 日韩精品一区二区三区三区免费| 激情四射综合网| 久久影视一区二区| 爽爽爽在线观看| 亚洲美洲欧洲综合国产一区| 欧洲一区二区日韩在线视频观看免费| 国语自产精品视频在线看抢先版结局| 欧美理论电影在线观看| 青春草在线观看| 日韩欧美一级二级三级| 依依成人综合网| 亚洲欧美在线另类| 屁屁影院国产第一页| 美女视频一区在线观看| 国产 日韩 欧美在线| 成人无号精品一区二区三区| 国产精品久久久久久久天堂第1集 国产精品久久久久久久免费大片 国产精品久久久久久久久婷婷 | 欧美特黄级在线| 精品国产精品国产精品| av不卡一区二区三区| 中文字幕66页| 久久婷婷麻豆| 妞干网在线观看视频| 欧美残忍xxxx极端| 久久精品五月婷婷| 国产视频网站一区二区三区| 欧美一区二区三区……| 污污视频在线看| 色青青草原桃花久久综合| 天堂在线视频免费观看| 欧美一区二区精品| 中文字幕在线一| 欧美日韩在线免费观看| www.毛片com| 亚洲国产成人自拍| 亚洲欧美色图视频| 国产91精品一区二区麻豆亚洲| 在线观看av网页| 爽好久久久欧美精品| 波多野结衣综合网| 最新国产精品久久久| 伊人久久大香线蕉午夜av| 深爱激情综合| 精品蜜桃传媒| 老司机精品视频在线播放| 91九色在线观看| 高清久久精品| 国产日本欧美一区二区三区在线 | 欧美一级特黄aaaaaa| 欧美精品在线观看一区二区| 欧美人一级淫片a免费播放| 精品久久中文字幕久久av| 久久久久久久国产视频| 亚洲欧美国产77777| 91ts人妖另类精品系列| 欧美激情一二三区| 四虎永久免费在线观看| 91日韩在线专区| 欧美 日本 国产| 91在线国产观看| 一区二区三区免费在线观看视频 | 久操视频免费看| 久久久精品一品道一区| 欧美狂猛xxxxx乱大交3| 99精品欧美一区二区蜜桃免费| 欧亚乱熟女一区二区在线| 国产在线精品一区二区| 亚洲视频一二三四| 奇米色777欧美一区二区| 欧美日韩亚洲自拍| 国产精品五区| 黄色一级片在线看| 在线欧美日韩| 国产免费黄色av| 视频在线观看一区二区三区| 人妻无码视频一区二区三区| 老司机午夜免费精品视频| 蜜臀久久99精品久久久酒店新书| 日韩电影免费在线看| 成人免费在线观看视频网站| 久久福利视频一区二区| 中文字幕 欧美日韩| 久久精品卡一| a√天堂在线观看| 亚洲精品九九| 黄色动漫在线免费看| 激情偷拍久久| 婷婷五月综合缴情在线视频| 亚洲精品极品| 冲田杏梨av在线| 激情综合网激情| 国产精九九网站漫画| 成人av网站免费| 中文幕无线码中文字蜜桃| 日本一区二区三级电影在线观看| 人妻体内射精一区二区三区| 久久久久国产精品麻豆| 蜜臀av午夜精品久久| 亚洲一区二区欧美| 黄色大片网站在线观看| 色呦呦网站一区| 久久久久女人精品毛片九一| 色偷偷成人一区二区三区91| 国产精品特级毛片一区二区三区| 精品国产不卡一区二区三区| 男男激情在线| 欧美乱大交xxxxx另类电影| 超碰在线99| 国产剧情日韩欧美| 欧美美女黄色| 成年人免费观看的视频| 一本久道久久久| 91在线第一页| 久久精品一区二区三区不卡| 婷婷伊人五月天| 日韩欧美在线第一页| 无码一区二区三区在线观看| 日韩亚洲电影在线| 电影av一区| …久久精品99久久香蕉国产| 国产成人a视频高清在线观看| 亚洲www永久成人夜色| 任你躁在线精品免费| 神马影院一区二区| 中国成人一区| 亚欧在线免费观看| 国产盗摄女厕一区二区三区| 国产高潮呻吟久久| 亚洲午夜免费视频| 国产麻豆一精品一男同| 亚洲性生活视频在线观看| av资源在线看片| 亚洲一区二区三区乱码aⅴ蜜桃女| 嫩草一区二区三区| 无码人妻少妇伦在线电影| 美女性感视频久久| 国产成人无码精品久久二区三| 一区二区三区 在线观看视频 | 婷婷综合久久| 一本久道中文无码字幕av| 不卡av免费在线观看| 成年人av电影| 7777精品久久久大香线蕉| 国产福利在线看| 欧美一区二区视频97| 久久综合社区| 亚洲色欲久久久综合网东京热| 欧美a一区二区| 久久av无码精品人妻系列试探| 一区二区激情小说| av一区二区三| 欧美大胆在线视频| 精品一区二区三区视频在线播放| 欧美极品视频一区二区三区| 亚洲欧洲另类| 国产精品九九视频| 亚洲一区二区在线视频| 怡红院男人的天堂| 亚洲精品自拍第一页| 国产乱码精品一区二三赶尸艳谈| 国产成人亚洲欧美| 在线欧美一区| 黄色a一级视频| 日本高清不卡aⅴ免费网站| 久久手机免费观看| 国产精品99免视看9| 成人综合久久| 看看黄色一级片| 亚洲品质自拍视频网站| 91国内精品久久久| 久久艳片www.17c.com | 欧美性色综合网| 高清中文字幕一区二区三区| 国产精品男女猛烈高潮激情| 精品国产一区二区三区av片| 又色又爽又高潮免费视频国产| 中文字幕欧美激情| 亚洲手机在线观看| 久久av.com| 黄色免费大全亚洲| 国产成人a亚洲精v品无码| 国产嫩草影院久久久久| 一个人看的www日本高清视频| 久久天天躁狠狠躁夜夜躁2014 | 粉嫩av一区二区三区免费野| 亚洲aaa在线观看| 国产999视频| 国产在视频线精品视频www666| 亚洲乱码国产一区三区| 国产精品私人影院| 国产婷婷一区二区三区久久| 欧美猛少妇色xxxxx| 亚欧日韩另类中文欧美| 亚洲精品视频导航| 一区二区三区四区在线免费观看| 无码精品人妻一区二区三区影院 | 看片一区二区| av动漫在线播放| 久久精品欧美一区二区三区麻豆| 国产精品福利电影| 97视频免费在线观看|