十五、 Spring Cloud Alibaba 整合Knife4j做接口文档

以前接口文档都是直接用丝袜哥的,最近几年一直用大佬的这个:Knife4j,尤其是到4.0.0版本以后,已经非常好用了。支持Swagger2规范OpenAPI3规范,同时也有Spring Boot 2.xSpring Boot 3.x的区分,还是很全面的,尤其Spring Boot 3.x版本,基本不用什么配置,方便。在微服务方案中,Knife4j更给出了gateway网关聚合版本。用起来真的很爽。
先看 官方文档
本次使用版本如下:

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

1. 微服务模块

基本就是照搬的官网例子,不用改什么。除非有特别需要配置的,我感觉一般这个就够了。

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 文档

该微服务模块可以直接看接口文档的:http://ip:port/doc.html

image.png

2. Gateway网关模块

这个配置有 手动 和 自动发现 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 成为了推荐的负载均衡方案。为了灵活性,需要手动引入,不然请求到不了各个服务-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!-- 做资源服务器权限校验用的,没用别引入 -->
<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时会自动生成路由规则,我们手动配置,值设置false
          enabled: false
          lowerCaseServiceId: true
      routes:
          # 自定义路由 ID
        - id: oauth2-route
          # 采用 LoadBalanceClient 方式请求,以 lb:// 开头,后面的是注册在 Nacos 上的服务名
          uri: lb://oauth2-server
          # Predicate 断言,主要作用是匹配用户的请求路径,有很多种用法
          predicates:
            # 路径匹配,一般是指要走网关时要写的路径地址
            - Path=/gateway/oauth2/**
          filters:
            # 指路由到其他服务时去掉path中几层路径,如值为1,则去掉1层,即去掉/gateway
            - StripPrefix=1
        - id: resource-route
          uri: lb://resource-server
          predicates:
            - Path=/gateway/resource/**
          filters:
            - StripPrefix=1
knife4j:
  gateway:
    # 是否开启
    enabled: true
    # 排序规则(tag/operation排序自4.2.0版本新增)
    # 取值:alpha-默认排序规则,官方swagger-ui默认实现,order-Knife4j提供的增强排序规则,开发者可扩展x-order,根据数值来自定义排序
    tags-sorter: order
    operations-sorter: order
    # 指定服务发现的模式聚合微服务文档,并且是默认`default`分组
    # 这是手动模式的,需要指定url,注意 url 和 context-path 这2个值的填写
#    strategy: manual
#    routes:
#      - name: 认证服务
#        # 真实通过网关访问子服务接口文档的uri地址:
#        # /v3/api-docs?group=default是固定值,
#        # /oauth2 是微服务的 context-path
#        # /gateway 是我在网关路由断言中自定义添加的,可以是/api等其他的,如果没有,这一层可以不用
#        url: /gateway/oauth2/v3/api-docs?group=default
#        service-name: oauth2-server
#        # 路由前缀
#        # 这个值在V3版本中,界面中调试时添加到微服务中uri前面的,一般和上面url前面部分相同
#        context-path: /gateway/oauth2
#        order: 1
    # 自动发现模式,读取nacos注册中心里的微服务
    strategy: discover
    discover:
      enabled: true
      # 指定版本号(Swagger2|OpenAPI3)
      version : openapi3
      # 需要排除的微服务(eg:网关服务)
      excluded-services:
        - gateway-server
      # 各个聚合服务的个性化配置,key:注册中心中的服务名称,value:个性化配置
      service-config:
        oauth2-server:
          # 排序
          order: 1
          # 前端显示名称
          group-name : 认证服务
          # 重新指定basePath,一般在OpenAPI3规范中需要
          context-path: /
        resource-server:
          # 排序
          order: 2
          # 前端显示名称
          group-name : 资源服务
          # 重新指定basePath,一般在OpenAPI3规范中需要
          context-path: /
2.3 网关接口文档
image.png

image.png

注意:

  • openApi3 注解 和 swagger2不一样:参考官网
swagger2 swagger3 注解位置
@Api @Tag Controller类
@ApiOperation(value = "foo", notes = "bar") @Operation(summary = "foo", description = "bar") api端口方法
@ApiImplicitParams @Parameters api端口方法
@ApiImplicitParam @Parameter api方法的参数
@ApiParam @Parameter api方法的参数
@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端口方法
  • 如果接口请求参数是实体类对象,可以添加@RequestBody(json格式)或者@ParameterObject(表单格式),使页面显示正常。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335