十五夹抗、 Spring Cloud Alibaba 整合Knife4j做接口文檔

以前接口文檔都是直接用絲襪哥的绳慎,最近幾年一直用大佬的這個:Knife4j,尤其是到4.0.0版本以后,已經(jīng)非常好用了杏愤。支持Swagger2規(guī)范OpenAPI3規(guī)范靡砌,同時也有Spring Boot 2.xSpring Boot 3.x的區(qū)分,還是很全面的珊楼,尤其Spring Boot 3.x版本通殃,基本不用什么配置,方便厕宗。在微服務(wù)方案中画舌,Knife4j更給出了gateway網(wǎng)關(guān)聚合版本。用起來真的很爽已慢。
先看 官方文檔
本次使用版本如下:

  • Spring Cloud Alibaba:2023.0.1.2
  • Spring Boot:3.3.3
  • Knife4j:4.4.0
  • Jdk:17

1. 微服務(wù)模塊

基本就是照搬的官網(wǎng)例子曲聂,不用改什么。除非有特別需要配置的佑惠,我感覺一般這個就夠了朋腋。

1.1 pom.xml
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Knife4j -->
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
</dependency>
<!-- nacos包 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
1.2 application.yml
spring:
  application:
    name: oauth2-server
# springdoc-openapi項目配置
springdoc:
  swagger-ui:
    path: /swagger-ui.html
    tags-sorter: alpha
    operations-sorter: alpha
  api-docs:
    path: /v3/api-docs
  group-configs:
    - group: 'default'
      paths-to-match: '/**'
      packages-to-scan: com.example.test.oauth2.controller
# knife4j的增強配置,不需要增強可以不配
knife4j:
  enable: true
  setting:
    language: zh_cn
1.3 文檔

該微服務(wù)模塊可以直接看接口文檔的:http://ip:port/doc.html

image.png

2. Gateway網(wǎng)關(guān)模塊

這個配置有 手動 和 自動發(fā)現(xiàn) 2種模式膜楷⌒裱剩看哪種適合需要

2.1 pom.xml
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- Knife4j-gateway -->
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-gateway-spring-boot-starter</artifactId>
</dependency>
<!-- nacos包 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- Spring Cloud Gateway 的早期版本中,Ribbon 被用作默認的負載均衡器, Spring Cloud 2020.0.0 版本開始赌厅,Ribbon 被廢棄穷绵,Spring Cloud LoadBalancer 成為了推薦的負載均衡方案。為了靈活性特愿,需要手動引入仲墨,不然請求到不了各個服務(wù)-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!-- 做資源服務(wù)器權(quán)限校驗用的,沒用別引入 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
2.2 application.yml
spring: 
  application: 
    name: gateway-server
  cloud: 
    gateway:
      discovery:
        locator:
          # 為true時會自動生成路由規(guī)則洽议,我們手動配置宗收,值設(shè)置false
          enabled: false
          lowerCaseServiceId: true
      routes:
          # 自定義路由 ID
        - id: oauth2-route
          # 采用 LoadBalanceClient 方式請求,以 lb:// 開頭亚兄,后面的是注冊在 Nacos 上的服務(wù)名
          uri: lb://oauth2-server
          # Predicate 斷言混稽,主要作用是匹配用戶的請求路徑,有很多種用法
          predicates:
            # 路徑匹配审胚,一般是指要走網(wǎng)關(guān)時要寫的路徑地址
            - Path=/gateway/oauth2/**
          filters:
            # 指路由到其他服務(wù)時去掉path中幾層路徑匈勋,如值為1,則去掉1層膳叨,即去掉/gateway
            - StripPrefix=1
        - id: resource-route
          uri: lb://resource-server
          predicates:
            - Path=/gateway/resource/**
          filters:
            - StripPrefix=1
knife4j:
  gateway:
    # 是否開啟
    enabled: true
    # 排序規(guī)則(tag/operation排序自4.2.0版本新增)
    # 取值:alpha-默認排序規(guī)則洽洁,官方swagger-ui默認實現(xiàn),order-Knife4j提供的增強排序規(guī)則,開發(fā)者可擴展x-order菲嘴,根據(jù)數(shù)值來自定義排序
    tags-sorter: order
    operations-sorter: order
    # 指定服務(wù)發(fā)現(xiàn)的模式聚合微服務(wù)文檔饿自,并且是默認`default`分組
    # 這是手動模式的汰翠,需要指定url,注意 url 和 context-path 這2個值的填寫
#    strategy: manual
#    routes:
#      - name: 認證服務(wù)
#        # 真實通過網(wǎng)關(guān)訪問子服務(wù)接口文檔的uri地址:
#        # /v3/api-docs?group=default是固定值昭雌,
#        # /oauth2 是微服務(wù)的 context-path
#        # /gateway 是我在網(wǎng)關(guān)路由斷言中自定義添加的复唤,可以是/api等其他的,如果沒有烛卧,這一層可以不用
#        url: /gateway/oauth2/v3/api-docs?group=default
#        service-name: oauth2-server
#        # 路由前綴
#        # 這個值在V3版本中佛纫,界面中調(diào)試時添加到微服務(wù)中uri前面的,一般和上面url前面部分相同
#        context-path: /gateway/oauth2
#        order: 1
    # 自動發(fā)現(xiàn)模式总放,讀取nacos注冊中心里的微服務(wù)
    strategy: discover
    discover:
      enabled: true
      # 指定版本號(Swagger2|OpenAPI3)
      version : openapi3
      # 需要排除的微服務(wù)(eg:網(wǎng)關(guān)服務(wù))
      excluded-services:
        - gateway-server
      # 各個聚合服務(wù)的個性化配置呈宇,key:注冊中心中的服務(wù)名稱,value:個性化配置
      service-config:
        oauth2-server:
          # 排序
          order: 1
          # 前端顯示名稱
          group-name : 認證服務(wù)
          # 重新指定basePath局雄,一般在OpenAPI3規(guī)范中需要
          context-path: /
        resource-server:
          # 排序
          order: 2
          # 前端顯示名稱
          group-name : 資源服務(wù)
          # 重新指定basePath甥啄,一般在OpenAPI3規(guī)范中需要
          context-path: /
2.3 網(wǎng)關(guān)接口文檔
image.png

image.png

注意:

swagger2 swagger3 注解位置
@Api @Tag Controller類
@ApiOperation(value = "foo", notes = "bar") @Operation(summary = "foo", description = "bar") api端口方法
@ApiImplicitParams @Parameters api端口方法
@ApiImplicitParam @Parameter api方法的參數(shù)
@ApiParam @Parameter api方法的參數(shù)
@ApiIgnore @Parameter(hidden = true) 或 @Operation(hidden = true) 或 @Hidden 各處皆可
@ApiModel @Schema DTO類
@ApiModelProperty @Schema(description = "注釋",requiredMode = RequiredMode.REQUIRED) DTO屬性
@ApiModelProperty(hidden = true) @Schema(accessMode = READ_ONLY) DTO屬性
@ApiResponse(code = 404, message = "foo") @ApiResponse(responseCode = "404", description = "foo") api端口方法
  • 如果接口請求參數(shù)是實體類對象,可以添加@RequestBody(json格式)或者@ParameterObject(表單格式)哎榴,使頁面顯示正常型豁。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市尚蝌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌充尉,老刑警劉巖飘言,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異驼侠,居然都是意外死亡姿鸿,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門倒源,熙熙樓的掌柜王于貴愁眉苦臉地迎上來苛预,“玉大人,你說我怎么就攤上這事笋熬∪饶常” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵胳螟,是天一觀的道長昔馋。 經(jīng)常有香客問我,道長糖耸,這世上最難降的妖魔是什么秘遏? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮嘉竟,結(jié)果婚禮上邦危,老公的妹妹穿的比我還像新娘洋侨。我一直安慰自己,他們只是感情好倦蚪,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布希坚。 她就那樣靜靜地躺著,像睡著了一般审丘。 火紅的嫁衣襯著肌膚如雪吏够。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天滩报,我揣著相機與錄音锅知,去河邊找鬼。 笑死脓钾,一個胖子當(dāng)著我的面吹牛售睹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播可训,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼昌妹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了握截?” 一聲冷哼從身側(cè)響起飞崖,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谨胞,沒想到半個月后固歪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡胯努,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年牢裳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叶沛。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡蒲讯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出灰署,到底是詐尸還是另有隱情判帮,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布氓侧,位于F島的核電站脊另,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏约巷。R本人自食惡果不足惜偎痛,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望独郎。 院中可真熱鬧踩麦,春花似錦枚赡、人聲如沸晾腔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诡壁。三九已至,卻和暖如春婴渡,著一層夾襖步出監(jiān)牢的瞬間糙臼,已是汗流浹背若未。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工才顿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留莫湘,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓郑气,卻偏偏與公主長得像幅垮,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子尾组,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348