<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網易首頁 > 網易號 > 正文 申請入駐

      告別Swagger UI!一款更適合 SpringBoot 的API文檔新選擇

      0
      分享至

      Java精選面試題(微信小程序):5000+道面試題和選擇題,包含Java基礎、并發、JVM、線程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架構設計、大廠真題等,在線隨時刷題!


      SpringDoc是什么

      SpringDoc 是一個專為 Spring Boot 應用設計的庫,能夠自動生成符合 OpenAPI 3 規范的 API 文檔。它通過掃描項目中的控制器、方法注解及配置,動態生成 JSON/YAML/HTML 格式的文檔,并提供交互式界面(如 Swagger UI)供開發者查看和測試 API

      與Swagger的關系

      Swagger 作為 OpenAPI 規范的前身,貢獻了 API 設計理念并推動了 OpenAPI 的標準化。其核心工具 Swagger UI 用于展示交互式文檔。

      SpringDoc 并非 Swagger 的替代品,而是基于 OpenAPI 3 規范的實現工具,并天然集成 Swagger UI 作為文檔展示界面

      為什么要選擇SpringDoc

      在SpringDoc面世之前,Spring生態中集成實現Swagger的技術為SpringFox,SpringFox與Swagger之間的協作關系如下

      SpringFox

      • ? 代碼掃描:SpringFox 在運行時掃描 Spring MVC 控制器(如@RestController)、方法注解(如@RequestMapping)以及 Swagger 專用注解(如@ApiOperation),提取接口的路徑、參數、響應等信息

      • ? 生成 OpenAPI 規范文檔: 將掃描結果轉換為符合 Swagger 2.0 或 OpenAPI 3.0 規范的 JSON 文件

      • ? 集成 Spring 生態,提供 Docket 配置類,支持自定義接口掃描范圍(如包路徑、URL 匹配規則)和文檔信息(如標題、版本、作者)

      Swagger
      • ? 可視化文檔渲染:將 SpringFox 生成的 JSON 文件解析為交互式網頁,通過瀏覽器訪問(如http://localhost:8080/swagger-ui.html

      • ? 提供接口列表、參數說明、請求示例,并支持在線測試 API(可直接發送請求并查看響應)

      • ? 標準化規范支持:Swagger 定義 OpenAPI 規范(原 Swagger 規范),為 API 描述提供統一標準(如接口路徑、請求方法、數據類型),SpringFox 生成的 JSON 文件完全遵循此規范,確保與其他 Swagger 工具(如Swagger Editor)兼容

      協作流程
      • ? 開發階段:開發者在 Spring 控制器中添加 Swagger 注解(如@Api@ApiParam),描述接口細節

      • ? 運行時:SpringFox 掃描代碼并生成 JSON 文檔

      • ? 展示階段:Swagger UI 讀取 JSON 文件,渲染為可視化界面供團隊使用

      在2020時,由于SpringFox官方基本停止維護,不再發布新版本或修復問題,再加上他無法適配 Spring Boot 2.6+ 及 3.x 版本,導致與新版本 Spring 生態沖突(如路徑匹配失效、注解不兼容)。以及配置的復雜性導致他逐漸退出市場

      轉而由更新的技術–SpringDoc接過接力棒,SpringDoc完美支持 Spring Boot 2.6+ 及 3.x(含 JDK 17+),并且原生支持OpenAPI 3 規范,除此之外,如果不需要特殊的復雜配置,甚至可以零配置,僅需引入一個依賴,即可實現開箱即用,還有他直接使用 JSR-303 規范注解(如@Schema@Parameter),替代 SpringFox 的專屬注解(如@ApiModel),降低了開發人員的學習成本

      正式發布

      最小化配置使用

      不多說廢話了,下面我們正式開始,首先我們先介紹最簡單,最小化的引入以及使用方式

      第一步:引入Jar包

      
           
      
       org.springdoc groupId>     
      
       springdoc-openapi-starter-webmvc-ui artifactId>     
      
       2.5.0 version>  dependency>
      
      
      
      

      第二步:配置配置文件

      正常使用SpringDoc,或多或少都會進行一些配置文件的配置,但是由于這里是進行最小化配置,所以這里不進行配置文件配置,僅僅介紹幾個重要配置的默認項,給大家一個基礎印象,方便大家理解后面運行時為什么要這樣做,當然,如果不感興趣的小伙伴也可以直接跳過,跟著步驟走,并不影響使用

      # application.yml springdoc: # SpringDoc的API包掃描路徑,如果不配置,SpringDoc 自動掃描整個項目類路徑,它會自動識別所有 @RestController、@RequestMapping 等注解,生成 API 文檔 packages-to-scan:com.example.controller swagger-ui:     # 是否開啟swagger界面,依賴OpenApi,默認為true,如果要開啟需要OpenApi同時開啟     enabled:true     # 內置 Swagger UI 的訪問路徑,默認值為/swagger-ui/index.html     path:/swagger-ui/index.html     # 指定OpenAPI文檔的URL(注意這里一定要與api-docs.path保持一致,否則會請求失敗)     url:/v3/api-docs     # 是否禁用Swagger UI自帶的示例接口(如 Petstore 等默認接口),默認值為false,僅展示當前項目的 API     disable-swagger-default-url:false api-docs:     # 是否啟用OpenAPI文檔端點,默認為true     enabled:true     # OpenAPI 3規范的文檔訪問路徑,默認值為/v3/api-docs     path: /api-docs

      第三步:添加一個配置類,用于設置Swagger-UI頁面的一些基礎信息的展示

      @Configuration @OpenAPIDefinition(info = @Info(     title = "項目API文檔",     version = "1.0",     description = "SpringBoot項目接口文檔" )) public class SpringDocConfig {     // 無需額外配置,注解已定義基本信息 }

      到這一步:其實已經可以訪問頁面,觀看效果了(訪問鏈接為:http://localhost:8080/swagger-ui/index.html,注意如果上方配置文件修改了,這里要替換為對應的鏈接,我這里沒有修改所以使用默認鏈接),只是項目如果沒有任何controller,這里會展示空頁面,如下:


      第四步:在需要顯示的Controller方法上加上注解,用于給方法添加備注,如下會展示不加注解與加注解的區別

      不加注解:

      @RestController @RequestMapping("/main") public class MainController {     @GetMapping("/index")     public String index(String str1) {         return "請求成功";     } }

      添加注解

      @RestController @RequestMapping("/main") @Tag(name = "演示controller", description = "演示controller") public class MainController {     @GetMapping("/index")     @Operation(summary = "演示方法", description = "演示方法的注釋")     public String index(             @Parameter(description = "參數1", required = true) String str1) {         return "請求成功";     } }

      至此為止,SpringDoc的最小化使用已經全部完成(請注意,以上所有配置生效的前提是,當前Spring項目未添加任何過濾器、攔截器,以及未使用SpringSecurity等安全框架,否則,僅僅進行最小化配置是無法運行的,因為一些默認配置可能會被攔截,如果需要更復雜配置,請繼續往下看)

      SpringDoc中簡單分組配置(包含編程式配置與聲明式配置)

      上方僅僅只是展示了SpringDoc的最基礎用法,接下來,我們展示SpringDoc的一種常用用法:分組,先上效果圖,讓大家了解是個什么功能


      接下來開始進行詳細配置:

      方式一:編程式配置(靈活性高、擴展性強、調試友好)

      @Configuration @OpenAPIDefinition(info = @Info(         title = "項目API文檔",         version = "1.0",         description = "SpringBoot項目接口文檔" )) publicclassSpringDocConfig {     /**      * 商品分組的配置(使用請求路徑掃描的方式進行配置)      * @return org.springdoc.core.models.GroupedOpenApi      * @author ren      * @date 2025/07/06 17:17      */     @Bean     public GroupedOpenApi userGroup() {         // 使用路徑匹配方式:僅包含 /api/product/** 下的接口         return GroupedOpenApi.builder()                 .group("商品模塊")                 .pathsToMatch("/api/product/**")   // 路徑匹配                 .build();     }     /**      * 會員分組的配置(使用包掃描的方式進行配置)      * @return org.springdoc.core.models.GroupedOpenApi      * @author ren      * @date 2025/07/06 17:17      */     @Bean     public GroupedOpenApi productGroup() {         // 使用包掃描方式:掃描 com.ren.main.controller.member 包下的所有接口         return GroupedOpenApi.builder()                 .group("用戶模塊")                 .packagesToScan("com.ren.main.controller.member") // 包掃描                 .build();     } }

      這種配置方式的原理是通過添加GroupedOpenApi類型的Bean,項目啟動時,SpringDoc會尋找環境中是否存在GroupedOpenApi類型的Bean,如果存在,則會創建分組進行展示

      注意:

      • ? 一旦這里配置了分組方式展示,那么在application.yml配置文件中配置的springdoc.packages-to-scan就會失效,因為SpringDoc的掃描機制,分組配置的掃描路徑優先級大于配置文件配置的掃描優先級

      • ? 路徑掃描有兩種方式,一種是根據請求路徑進行掃描,一種是根據包路徑進行掃描,上方都有進行配置

      • ? 如果多個分組中有重合的路徑,也就是說一個接口在多個分組配置的路徑中都能掃描到,那么這個接口會存在于多個分組中

      以下展示我的代碼結構,方便大家理解:





      大家會發現,我的目錄中有一個MainController的內容,在頁面中沒有展示了,這是為什么呢?原因我上面提過了,因為分組的配置會覆蓋默認配置與配置文件配置,而分組配置中由于沒有包含MainController的內容,所以,MainController的內容沒有地方展示了

      那么如果想要展示出這個文件中的接口該怎么辦呢?很簡單,在分組中再加一個默認分組,用于展示所有接口內容即可,如下

      @Configuration @OpenAPIDefinition(info = @Info(         title = "項目API文檔",         version = "1.0",         description = "SpringBoot項目接口文檔" )) publicclassSpringDocConfig {     /**      * 默認分組      * @return org.springdoc.core.models.GroupedOpenApi      * @author ren      * @date 2025/07/06 17:38      */     @Bean     public GroupedOpenApi defaultGroup() {         return GroupedOpenApi.builder()                 .group("默認分組")                 .pathsToMatch("/**")   // 路徑匹配                 .build();     }     /**      * 商品分組的配置(使用請求路徑掃描的方式進行配置)      * @return org.springdoc.core.models.GroupedOpenApi      * @author ren      * @date 2025/07/06 17:17      */     @Bean     public GroupedOpenApi userGroup() {         // 使用路徑匹配方式:僅包含 /api/product/** 下的接口         return GroupedOpenApi.builder()                 .group("商品模塊")                 .pathsToMatch("/api/product/**")   // 路徑匹配                 .build();     }     /**      * 會員分組的配置(使用包掃描的方式進行配置)      * @return org.springdoc.core.models.GroupedOpenApi      * @author ren      * @date 2025/07/06 17:17      */     @Bean     public GroupedOpenApi productGroup() {         // 使用包掃描方式:掃描 com.ren.main.controller.member 包下的所有接口         return GroupedOpenApi.builder()                 .group("用戶模塊")                 .packagesToScan("com.ren.main.controller.member") // 包掃描                 .build();     } }

      配置后展示的內容


      看上面的圖,MainController的內容展示在這里了,同時ProductControllerMemberController的內容也展示在這里了,這是為什么呢,原因我上面說過了,如果一個請求被多個分組掃描到,那么他會展示在多個分組中

      方式二:聲明式配置(配置集中管理、可使用多配置文件進行環境隔離)

      springdoc:   group-configs:     -group:'默認分組'       paths-to-match:'/**'     -group:'商品模塊'       paths-to-match:'/api/product/**'     -group:'用戶模塊'       packages-to-scan: 'com.ren.main.controller.member'

      如上:效果與方式一相同

      如果項目中重寫了WebMvcConfigurer的addResourceHandlers方法,所需進行的處理

      WebMvcConfigurer

      WebMvcConfigurer是 Spring MVC 的配置中樞,用于定制化 Spring MVC 的各種行為。它不是過濾器或攔截器,而是一個配置接口(類似汽車的儀表盤),讓你調整 Spring MVC 的運行方式。

      他所擁有的方法

      • ?addInterceptors(registry):注冊攔截器

      • ?addCorsMappings(registry):配置跨域權限

      • ?addResourceHandlers(registry):指定靜態資源路徑

      • ?addViewControllers(registry):設置簡易頁面跳轉

      • ?configureMessageConverters(list):定制JSON/XML解析器

      • ?configurePathMatch(configurer):調整URL匹配規則

      • ?addArgumentResolvers(list):自定義請求參數處理器

      • ?addReturnValueHandlers(list):自定義返回值處理器

      • ?configureContentNegotiation(configurer):內容協商配置(響應格式協商)

      如果我們重寫了WebMvcConfigureraddResourceHandlers方法,那么原本Spring自己默認配置的所有的靜態資源的指向路徑就全都會失效,于是就需要我們自己去配置指定

      @Configuration publicclassResourcesConfigimplementsWebMvcConfigurer {     @Override     publicvoidaddResourceHandlers(ResourceHandlerRegistry registry) {         registry.addResourceHandler("/swagger-ui/**")             .addResourceLocations("classpath:/META-INF/resources/webjars/springdoc-openapi-ui/")             .setCacheControl(CacheControl.maxAge(5, TimeUnit.HOURS).cachePublic());     } }

      按照如上設置后,SpringDoc將恢復正常(注意新版的SpringDoc和老版的SpringFox配置有所區別,這里只展示新版SpringDoc的配置方法)如果大家對老版配置有需要,可以留言,留言人多會單獨出一期

      如果項目引入了SpringSecurity需要進行的處理

      由于項目引入了SpringSecurity,導致如果項目不經過認證無法訪問系統資源,我們就需要在SpringSecurity的配置文件中放開SpringDoc相關的靜態資源的攔截,如下

      @Configuration @EnableWebSecurity @EnableMethodSecurity publicclassSecurityConfig {     /*      * 配置過濾器鏈      * @param http      * @return org.springframework.security.web.SecurityFilterChain      * @author ren      * @date 2025/04/17 21:30      */     @Bean     public SecurityFilterChain securityFilterChain(HttpSecurity http)throws Exception {         http.authorizeHttpRequests(auth -> auth                 // 允許 OPTIONS 方法通過                 .requestMatchers(HttpMethod.OPTIONS, "/**").permitAll()                 // 靜態資源,可匿名訪問                 .requestMatchers(request -> {                     Stringpath= request.getServletPath();                     return (request.getMethod().equals("GET") && ( "/".equals(path) || path.endsWith(".html") || path.endsWith(".css") || path.endsWith(".js")));                 }).permitAll()                 .requestMatchers("/swagger-ui/**", "/*/api-docs/**", "/swagger-resources/**", "/webjars/**", "/druid/**")                 .permitAll()                 // 除上面外的所有請求全部需要鑒權認證                 .anyRequest().authenticated()         );         return http.build();     } }

      添加如上配置后,即可放開SpringSecurity的認證限制

      總結

      以上就是今天要講的內容,本文簡單介紹了SpringDoc整合在SpringBoot項目中的步驟,如果有遺漏,請大家留言,看到后會進行補充。

      作者:犯困嫌疑人(づ ●─● )づ

      https://blog.csdn.net/2503_92695612

      公眾號“Java精選”所發表內容注明來源的,版權歸原出處所有(無法查證版權的或者未注明出處的均來自網絡,系轉載,轉載的目的在于傳遞更多信息,版權屬于原作者。如有侵權,請聯系,筆者會第一時間刪除處理!

      最近有很多人問,有沒有讀者交流群!加入方式很簡單,公眾號Java精選,回復“加群”,即可入群!

      文章有幫助的話,點在看,轉發吧!

      特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關推薦
      熱點推薦
      癌癥去世的人越來越多?醫生反復提醒:寧可打打牌,也別做這5事

      癌癥去世的人越來越多?醫生反復提醒:寧可打打牌,也別做這5事

      蜉蝣說
      2025-12-19 22:01:31
      我外交部突然發出警告,如果外媒消息屬實,中日事態將會相當嚴重

      我外交部突然發出警告,如果外媒消息屬實,中日事態將會相當嚴重

      影孖看世界
      2025-12-19 19:14:04
      寧波小洛熙尸檢報告披露,大量內幕遠超想象,法醫一句話信息量大

      寧波小洛熙尸檢報告披露,大量內幕遠超想象,法醫一句話信息量大

      博士觀察
      2025-12-20 22:59:58
      拔“刺”高手,伊薩克對熱刺打入7球為英超生涯最多

      拔“刺”高手,伊薩克對熱刺打入7球為英超生涯最多

      懂球帝
      2025-12-21 03:04:14
      羅素:愚蠢的四大特征

      羅素:愚蠢的四大特征

      尚曦讀史
      2025-12-19 09:55:05
      除了戰敗認輸,已經無路可走?洪森軍隊遭重創:柬埔寨或爆發內亂

      除了戰敗認輸,已經無路可走?洪森軍隊遭重創:柬埔寨或爆發內亂

      策前論
      2025-12-20 23:12:53
      柬埔寨電詐分子上演大逃亡,場面震撼!

      柬埔寨電詐分子上演大逃亡,場面震撼!

      環球熱點快評
      2025-12-20 07:53:18
      “邪修大法”做家務就是快!一分錢不花,家里就窗明幾凈~

      “邪修大法”做家務就是快!一分錢不花,家里就窗明幾凈~

      裝修秀
      2025-12-19 11:30:03
      馬云預言或將應驗了?未來5年,比開藥店還要暴利的4個方向

      馬云預言或將應驗了?未來5年,比開藥店還要暴利的4個方向

      百態人間
      2025-12-20 05:25:03
      向高市早苗示好不到24小時,張本底細被扒,父母的黑歷史也被翻出

      向高市早苗示好不到24小時,張本底細被扒,父母的黑歷史也被翻出

      天天熱點見聞
      2025-12-20 06:08:30
      民進黨支持者竟造謠“嫌犯是大陸籍” 蔣萬安駁斥

      民進黨支持者竟造謠“嫌犯是大陸籍” 蔣萬安駁斥

      看看新聞Knews
      2025-12-21 00:07:04
      55歲鐘麗緹中年發福太多!胖到180斤 胸大腚圓 滿身肥肉穿吊帶

      55歲鐘麗緹中年發福太多!胖到180斤 胸大腚圓 滿身肥肉穿吊帶

      廣西阿妹香香
      2025-12-20 15:58:58
      上海一對情侶戀愛時男方說“我養你”,分手后女方以此為證,拒絕返還40余萬元!測謊實驗后,法院判了

      上海一對情侶戀愛時男方說“我養你”,分手后女方以此為證,拒絕返還40余萬元!測謊實驗后,法院判了

      都市快報橙柿互動
      2025-12-20 09:35:12
      克林頓與愛潑斯坦案受害者共浴照片披露

      克林頓與愛潑斯坦案受害者共浴照片披露

      揚子晚報
      2025-12-20 11:50:57
      快扔掉!戴一天,輻射量相當于拍117次胸片

      快扔掉!戴一天,輻射量相當于拍117次胸片

      FM93浙江交通之聲
      2025-10-28 00:01:43
      同仁堂集團就南極磷蝦油事件致歉:全面開展品牌清理行動

      同仁堂集團就南極磷蝦油事件致歉:全面開展品牌清理行動

      界面新聞
      2025-12-20 09:03:27
      北京阿姨20年守茅臺股票:90萬本金,分紅326萬,成本歸零!

      北京阿姨20年守茅臺股票:90萬本金,分紅326萬,成本歸零!

      趣文說娛
      2025-12-20 18:29:20
      歐爾班抨擊歐盟向烏提供貸款,波蘭外長向歐爾班頒發列寧勛章

      歐爾班抨擊歐盟向烏提供貸款,波蘭外長向歐爾班頒發列寧勛章

      山河路口
      2025-12-20 19:17:58
      歐盟動用俄資產的方案未獲通過

      歐盟動用俄資產的方案未獲通過

      環球時報國際
      2025-12-20 09:31:53
      轉發野三坡隧道事故視頻被要求刪除,還有網友稱發生了爆炸

      轉發野三坡隧道事故視頻被要求刪除,還有網友稱發生了爆炸

      映射生活的身影
      2025-12-20 19:18:13
      2025-12-21 03:44:49
      Java精選
      Java精選
      一場永遠也演不完的戲
      1764文章數 3859關注度
      往期回顧 全部

      科技要聞

      許四清:具身智能的"ChatGPT時刻"還未到來

      頭條要聞

      臺北致4人身亡嫌犯被指是"大陸籍" 蔣萬安回應

      頭條要聞

      臺北致4人身亡嫌犯被指是"大陸籍" 蔣萬安回應

      體育要聞

      我開了20年大巴,現在是一名西甲主帥

      娛樂要聞

      2026央視跨年晚會陣容曝光,豪華陣仗

      財經要聞

      求解“地方財政困難”

      汽車要聞

      嵐圖推進L3量產測試 已完成11萬公里實際道路驗證

      態度原創

      游戲
      藝術
      旅游
      公開課
      軍事航空

      逆天!LCK頒獎Faker無緣獎項,LPL解說炮轟開罵直播間差點被封

      藝術要聞

      投資26億!廣州“獨角獸”的總部大樓,躍出地面!

      旅游要聞

      虹口新春“五必”榜單來啦!一季度“樂購樂游”攻略輕松拿捏!

      公開課

      李玫瑾:為什么性格比能力更重要?

      軍事要聞

      澤連斯基:前線局勢愈發艱難

      無障礙瀏覽 進入關懷版 主站蜘蛛池模板: 中文字幕国产av| 成人国产亚洲精品天堂AV| 中文天堂最新版在线www| 一本色道无码DVD色诱| 实拍女处破www免费看| 88国产精品视频一区二区三区| 乳山市| 亚洲综合色婷婷中文字幕| 成人免费直播| 亚洲av电影天堂网| 亚洲色频| 最近免费中文字幕mv在线视频3| 77777五月色婷婷丁香视频| 狼人伊人久久| 久久国模| 97人人添人澡人人爽超碰| 久久久国产精品消防器材| 亚洲伊人影院| 亚洲国产精品成人网站| 亚洲国产欧美在线看片一国产 | 伊人久久大香线蕉av一区| 毛片免费观看天天干天天爽| 无码粉嫩虎白一线天在线观看| 泰安市| 国产制服丝袜在线播放| 色综合久久久久综合体桃花网| 少妇人妻偷人精品一区二区| jizzjizzjizzjizz| 苍井空亚洲精品AA片在线播放| 午夜福利日本一区二区无码| 久久无码人妻热线精品| 99热在线观看| 亚洲成人综合精品| 国模无码在线| 欧美色吊丝| 欧美性群另类交| 成年男女免费视频网站| 欧美?日韩?人妻| 大新县| 亚洲AVAV天堂Av在线播放| 老色鬼在线精品视频在线观看|