精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产成人精品免费在线| 99精品全国免费观看视频软件| 亚洲一区在线观看免费观看电影高清| av成人免费观看| www.av麻豆| 国产伦精品一区二区三区视频| 欧美日韩中字一区| 成人短视频在线观看免费| 日韩在线无毛| 国产在线一区观看| 91精品国产91久久久久久不卡| 亚洲自拍偷拍图| 久久99成人| 日韩欧美综合在线视频| 青青草影院在线观看| 亚洲 另类 春色 国产| 国内精品第一页| 欧美在线观看网址综合| 精品无码一区二区三区蜜臀| 欧美aaaaa级| 欧美精品久久久久久久久老牛影院| 精品久久久久久无码中文野结衣| 国产大学生校花援交在线播放| 国产激情一区二区三区四区| 国产精品高潮视频| 国产成人精品a视频一区| 99成人在线视频| 亚洲人免费视频| 又黄又色的网站| 综合久久av| 91黄色在线观看| 男人添女人下部高潮视频在观看| 麻豆传媒在线免费| 国产人成亚洲第一网站在线播放| 国产一区二区三区av在线| 国产精品久久久午夜夜伦鲁鲁| 另类图片国产| 久久久亚洲成人| 久久久精品人妻一区二区三区四| 成人久久电影| 国产一区二区日韩精品欧美精品| 中文字幕 日本| 亚洲不卡在线| 欧美一区中文字幕| 久久久久久久久久一区二区| 精品欧美日韩精品| 色成人在线视频| 欧美成人xxxxx| 激情黄产视频在线免费观看| 一区二区不卡在线播放| 看一级黄色录像| 免费观看久久久久| 亚洲欧洲日韩av| 亚洲一区精品视频| 美女av在线播放| 亚洲欧洲日韩一区二区三区| 一区视频二区视频| 免费网站成人| 综合电影一区二区三区 | 91国内产香蕉| 日本a在线观看| 99精品视频免费观看视频| 97婷婷涩涩精品一区| 999这里只有精品| 美女尤物久久精品| 国产精品久久久久久婷婷天堂| 国产精品乱码一区二区视频| 日本不卡视频一二三区| 91精品国产综合久久香蕉922| 在线观看国产黄| 国产一区二区女| 99视频网站| 香蕉av在线播放| 国产欧美精品一区aⅴ影院| 色狠狠久久av五月综合|| 色大18成网站www在线观看| 亚洲欧美激情在线| 日韩国产成人无码av毛片| 日本黄色免费在线| 欧美在线不卡视频| 欧洲在线免费视频| 红杏视频成人| 国产一区二区三区毛片| 国产午夜手机精彩视频| 亚洲国产国产亚洲一二三| 日韩av电影在线网| 国产人妻精品一区二区三| 成人动漫在线一区| 欧美资源一区| 97caopron在线视频| 香蕉加勒比综合久久| 黄色一级免费大片| 香蕉免费一区二区三区在线观看| 亚洲精品福利在线观看| 国产毛片欧美毛片久久久| 欧美/亚洲一区| 日本欧美黄网站| 中国a一片一级一片| 波多野结衣三级视频| 国产精品嫩草在线观看| 国产精品18久久久久久麻辣| 一区二区欧美激情| 亚洲色图在线观看| 亚洲第一区第二区第三区| 国产成人aa在线观看网站站| 亚洲欧美另类人妖| 蜜臀久久精品久久久用户群体| 99日韩精品| 91亚洲国产成人久久精品网站| 天天综合在线视频| 亚洲视频一区在线| 国产精品久久久久9999小说| 77成人影视| www国产亚洲精品久久网站| 国产一级做a爱片久久毛片a| 国产在线日韩欧美| 青青影院一区二区三区四区| 欧美家庭影院| 欧美人体做爰大胆视频| 爱爱的免费视频| 韩日视频一区| 91久久精品国产91久久| 第三区美女视频在线| 激情成人在线视频| 国产xxx在线观看 | 精品亚洲一区二区三区四区五区高| 亚洲成a人v欧美综合天堂麻豆| 疯狂做受xxxx高潮欧美日本| 国产又粗又猛又爽又黄| 天天精品视频| 国产精品一区专区欧美日韩| 久草在线青青草| 色综合色狠狠综合色| 无码人妻一区二区三区免费n鬼沢| 欧美aaaa视频| 国产美女主播一区| 成年人视频在线免费观看| 欧美午夜视频在线观看| 亚洲观看黄色网| 亚洲精品在线二区| 国产精品乱码视频| 1区2区在线| 亚洲成年网站在线观看| 国产一级在线观看视频| 高清日韩电视剧大全免费| 18视频在线观看娇喘| 久久爱www.| 欧美成人激情在线| 国产高中女学生第一次| 一区二区三区成人| www.四虎精品| 在线综合亚洲| 欧美午夜视频在线| 国产精品久久久久77777丨| 亚洲人免费视频| 中文在线观看av| 国产精品国产精品国产专区不片 | 国产曰批免费观看久久久| 亚洲在线色站| 国产精品一区免费在线 | 久久9999久久免费精品国产| 国产精品456露脸| 精品国产一区二区三区无码| 国产精品丝袜在线播放| 91成人在线视频| 精品福利视频导航大全| 欧美丝袜自拍制服另类| 中国1级黄色片| 国产乱码精品一区二区三区av| 免费看日b视频| 麻豆一区一区三区四区| 国产va免费精品高清在线| 精品电影在线| 欧美日韩久久一区二区| 岛国毛片在线观看| 99久久久国产精品| 嫩草影院国产精品| 欧美精品日本| 欧美精品一区二区三区四区五区| yy6080久久伦理一区二区| 久久成人精品视频| 性猛交xxxx| 欧美日韩免费观看一区三区| 国产一级免费av| 国产日韩精品一区二区浪潮av| 999在线精品视频| 99日韩精品| 综合久久国产| 天海翼亚洲一区二区三区| 国产主播喷水一区二区| 嗯~啊~轻一点视频日本在线观看| 亚洲人成五月天| 国产成人精品无码高潮| 色综合咪咪久久| 麻豆明星ai换脸视频| 91美女片黄在线| 九九热视频免费| 国产精品一级| 男女啪啪免费观看| 国产一区二区三区四区二区| 亚洲影影院av| 日韩av首页| 国内精品视频久久| 欧美jizzhd欧美| 亚洲精品少妇网址| 国产av精国产传媒| 欧美在线不卡视频| 在线观看免费国产视频| 亚洲三级电影全部在线观看高清| 色呦呦一区二区| 国产91精品入口| 国内自拍视频网| 99视频一区| 日韩人妻精品一区二区三区| 精品亚洲成人| 久久久99国产精品免费| 麻豆国产一区| 成人黄色网免费| 国产一区二区主播在线| 日本91av在线播放| jizzjizz中国精品麻豆| 久久精品亚洲热| av基地在线| 亚洲欧美日韩直播| 人人妻人人澡人人爽久久av| 日韩女优av电影| 国产尤物视频在线观看| 在线一区二区三区四区五区 | 欧美三级视频在线观看| 国产精品午夜影院| 午夜电影一区二区| 久久综合激情网| 一区二区在线观看不卡| 精品人妻伦九区久久aaa片| 中文字幕一区日韩精品欧美| 国产ts在线播放| 91老师国产黑色丝袜在线| 娇妻高潮浓精白浆xxⅹ| 国产精品自拍在线| 国产成人强伦免费视频网站| 黑人巨大精品欧美一区| 日韩免费视频一区二区| 日韩欧美在线播放| 亚洲免费精彩视频| 蜜桃网站成人| 中文人妻一区二区三区| 欧美精品三级在线| 国产欧美日韩专区发布| av在线收看| av在线不卡电影| 亚洲视频欧洲视频| 久久久久久久久久久久久久国产| 激情视频极品美女日韩| 精品毛片一区二区三区| 日本高清免费不卡视频| 日韩久久中文字幕| 黑人巨大精品欧美一区二区免费 | 韩日视频在线| 日韩经典第一页| 日本韩国精品一区二区| 精品中文字幕久久久久久| 婷婷综合激情网| 亚洲激情视频网| 色综合成人av| 中文字幕亚洲二区| 成人a在线视频免费观看| 蜜臀久久99精品久久久无需会员| bt在线麻豆视频| 欧美另类暴力丝袜| 色资源二区在线视频| 国产精品户外野外| 国产精品国产亚洲精品| 99在线看视频| 欧美高清视频看片在线观看| 欧美三级电影在线播放| 99成人在线视频| 青青草视频在线视频| 99视频+国产日韩欧美| 日本成人中文字幕在线| 国产一区二区三区免费看| 亚洲美女精品视频| 国产香蕉久久精品综合网| 成人欧美一区二区三区黑人一| 一区二区三区欧美日韩| 国产精品第5页| 欧美精品丝袜久久久中文字幕| 亚洲国产精彩视频| 亚洲天堂网在线观看| 国产激情在线观看| 91高潮精品免费porn| 国产成人精选| 国产美女精品在线观看| 成人激情开心网| av片在线免费| 免费观看在线综合色| 亚洲av成人精品一区二区三区| 国产亚洲综合在线| 久久久久成人网站| 在线亚洲免费视频| 黄色片一区二区三区| 这里只有视频精品| 黑人极品ⅴideos精品欧美棵| 国产精品444| h视频久久久| 亚洲午夜高清视频| 一区二区三区国产盗摄| 手机免费看av网站| 国产无遮挡一区二区三区毛片日本| 国产精品九九九九九九| 在线观看成人免费视频| 人妻一区二区三区免费| 精品国内自产拍在线观看| 免费电影日韩网站| 高清国产一区| 亚洲精品国产成人影院| 中文字幕无码不卡免费视频| 成人丝袜高跟foot| 欧美手机在线观看| 欧美性xxxxxx少妇| 日韩精品一二| 久久久久久久久久婷婷| 国语精品视频| 在线国产99| 男人的j进女人的j一区| 午夜理伦三级做爰电影| 调教+趴+乳夹+国产+精品| www.麻豆av| 久久夜色精品亚洲噜噜国产mv | 国产综合欧美| 成人综合久久网| 欧美激情一区二区三区不卡| 国产欧美一区二区三区在线看蜜臂| 欧美成人女星排行榜| www免费视频观看在线| 成人黄色免费看| 欧美激情成人| 婷婷免费在线观看| 欧美极品xxx| 波多野结衣理论片| 亚洲视频在线播放| 欧美momandson| 蜜桃狠狠色伊人亚洲综合网站| 一本综合精品| 亚洲欧美视频在线播放| 午夜精品福利一区二区蜜股av| 日韩有码第一页| 久久免费国产视频| 久本草在线中文字幕亚洲| 无码专区aaaaaa免费视频| www.色精品| 国产精品va无码一区二区三区| 国产丝袜一区二区三区| 欧美xxx网站| 品久久久久久久久久96高清| 日韩激情中文字幕| 男人的天堂av网| 欧美日韩精品久久久| 国产高清一区二区三区视频| 999视频在线免费观看| 亚洲午夜一区| 中文字幕日韩三级片| 色狠狠桃花综合| 欧美69xxx| 国产成人成网站在线播放青青| 一区二区亚洲| 亚洲做受高潮无遮挡| 欧美网站一区二区| 最新黄网在线观看| 精品国产91亚洲一区二区三区www| 一区二区动漫| 日本少妇xxxxx| 91精品国产综合久久久久久漫画 | 国产一级片中文字幕| 亚洲一区二区精品3399| 日韩在线免费看| 成人黄色大片在线免费观看| 欧美三级视频| 在线免费观看麻豆| 欧美精品777| 久久影院午夜精品| 亚洲国产一区二区精品视频 | 日韩片在线观看| 欧美丝袜丝nylons| 欧美黑人猛交的在线视频| 欧美精品一区在线发布| 激情五月婷婷综合| 天堂在线免费观看视频| 日韩一区二区精品视频| 久久婷婷国产| 911福利视频| 天天操天天色综合| 欧美激情办公室videoshd| 国产欧美在线一区二区| 蜜臀精品久久久久久蜜臀| 久久久久亚洲av无码专区| 亚洲视频在线观看免费| youjizz亚洲| 手机在线国产视频| 日韩欧美一区二区三区久久| caopo在线|