Spring Cloud微服务项目聚合Swagger文档

news2024/11/16 3:18:44

        在微服务架构中,每个服务通常都有自己独立的 API 文档。为了方便管理和查看所有服务的接口文档,我们需要将这些文档进行聚合。Spring Cloud Swagger 的结合可以帮助我们实现这一目标。本文将介绍如何在 Spring Cloud 微服务项目中聚合 Swagger 文档,以便于集中查看和管理。

1.前置条件

        在开始本文之前,博主希望你已经完成微服务项目的搭建:

微服务项目搭建请参考:  Spring Cloud微服务项目搭建

1.在子模块添加 Knife4j 依赖 

因为博主是 Spring Boot 3.x 版本的缘故,所以用的是 Knife4j

<!-- Knife4j Plugin -->
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
    <version>4.4.0</version>
</dependency>

 2.为子模块添加配置项

        在 application.yml application.properties 文件中添加以下配置:

# application.yml 文件

springdoc:
  swagger-ui:
    path: /swagger-ui.html
    tags-sorter: alpha
    operations-sorter: alpha
  api-docs:
    path: /v3/api-docs
  group-configs:
    - group: 'system-service'
      paths-to-match: '/**'
      packages-to-scan: system.controller  # controller层路径

knife4j:
  enable: false
  setting:
    language: zh_cn
# application.properties 文件

springdoc.swagger-ui.path=/swagger-ui.html
springdoc.swagger-ui.tags-sorter=alpha
springdoc.swagger-ui.operations-sorter=alpha
springdoc.api-docs.path=/v3/api-docs
springdoc.group-configs[0].group=system-service
springdoc.group-configs[0].paths-to-match=/**
springdoc.group-configs[0].packages-to-scan=system.controller  # controller层路径

knife4j.enable=false
knife4j.setting.language=zh_cn

3.在子模块创建 Knife4j 配置类

        创建 SwaggerConfig 配置类,进行接口文档的一些个性化配置:

@Configuration
public class SwaggerConfig {

    @Bean
    public OpenAPI springShopOpenApi() {
        return new OpenAPI()
                // 接口文档标题
                .info(new Info().title("User Service API")
                        // 接口文档简介
                        .description("User Service API Documentation")
                        // 接口文档版本
                        .version("V1.0.0")
                        // 开发者联系方式
                        .contact(new Contact().name("LuoLi")
                                .email("zhugeyun546@gmail.com")));

    }

}

4.在Controller层编写接口

@RestController
@RequestMapping("/api/auth/user")
@Tag(name = "用户管理")
public class UserController {

    private final UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

    @GetMapping("/getInvitationCode")
    @Operation(summary = "获取邀请码")
    public String getInvitationCode(@RequestHeader("Authorization") String token) {
        String jwt = token.substring(14);
        return userService.getInvitationCode(jwt);
    }

    @DeleteMapping("/delete/{userId}")
    @Operation(summary = "删除【用户/管理员】", parameters = {
            @Parameter(
                    name = "Authorization",
                    description = "TOKEN",
                    in = ParameterIn.HEADER,
                    required = true,
                    schema = @Schema(type = "string")
            )
    })
    public int deleteUser(@PathVariable("userId") String userId) {

        return userService.deleteUser(userId);
    }

    @PutMapping("/update")
    @Operation(summary = "修改【用户/管理员】信息", parameters = {
            @Parameter(
                    name = "Authorization",
                    description = "TOKEN",
                    in = ParameterIn.HEADER,
                    required = true,
                    schema = @Schema(type = "string")
            )
    })
    public int updateUser(@RequestBody UserInfoModel model) {
        return userService.updateUserInfo(model);
    }

    @GetMapping("/selectUserInfoByEmail")
    @Operation(summary = "根据邮箱查询用户信息", parameters = {
            @Parameter(
                    name = "Authorization",
                    description = "TOKEN",
                    in = ParameterIn.HEADER,
                    required = true,
                    schema = @Schema(type = "string")
            )
    })
    public List<UserInfoModel> selectUserInfoByEmail(@RequestParam String email) {
        return userService.getUserInfo(email);
    }
}

5.查看接口文档

Knife4j 文档的地址通常为:http://${host}:${port}/doc.html

 6.在网关服务聚合 Knife4j 文档

6.1.在网关服务引入 Knife4j 依赖

<!-- knife4j Aggregate documents -->
<dependency>
   <groupId>com.github.xiaoymin</groupId>
   <artifactId>knife4j-gateway-spring-boot-starter</artifactId>
   <version>4.4.0</version>
</dependency>

注意:这里 Gateway 服务的 Knife4j 依赖与先前 user 服务的 Knife4j 不是同一个依赖

6.2.为网关服务添加配置项

        在 application.yml application.properties 文件中添加以下配置:

knife4j:
  gateway:
    enabled: true
    strategy: manual
    discover:
      enabled: true
      version: openapi3
      excluded-services:
        - gateway-service
    routes:
      - name: user-service
        service-name: user-service
        context-path: /
        url: /user-service/v3/api-docs?group=user-service
        order: 1

      - name: order-service
        service-name: order-service
        context-path: /
        url: /order-service/v3/api-docs?group=order-service
        order: 2

      - name: finance-service
        service-name: finance-service
        context-path: /
        url: /finance-service/v3/api-docs?group=finance-service
        order: 3

博主这里建议让 Gateway 自动去配置 Knife4j 服务路径:

spring:
  application:
    name: gateway-service
  cloud:
    nacos:
      config:
        import-check:
          enabled: false
      server-addr: 127.0.0.1
      discovery:
        namespace: root
        username: root
        password: root
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
        - id: user-service
          uri: lb://auth-service
          predicates:
            - Path=/api/**

        - id: order-service
          uri: lb://auth-service
          predicates:
            - Path=/api/**

        - id: finance-service
          uri: lb://auth-service
          predicates:
            - Path=/api/**

 7.启动网关服务

在我们启动网关服务后,所有的请求都向网关服务端口发送了

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1992299.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

72 成员方法、类方法、静态方法、抽象方法

在面向对象程序设计中&#xff0c;函数和方法这两个概念是有本质区别的。方法一般指与特定实例绑定的函数&#xff0c;通过对象调用方法时&#xff0c;对象本身将被作为第一个参数自动传递过去&#xff0c;普通函数并不具备这个特点。 class Demo:passt Demo()def test(self,…

html+css网页设计公司网站模版3个页面 无js 静态页面

htmlcss网页设计公司网站模版3个页面 无js 静态页面 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源…

推送给女朋友让她自己学习打光去(Stable Diffusion进阶篇:Imposing Consistent Light)

大家好我是极客菌&#xff01;&#xff01;&#xff01; 对于学过stable diffusion的小伙伴来说&#xff0c;forge UI和Comfy UI会更加熟悉一些。在IC-Light发布后&#xff0c;Openpose editor的开发者将其制作成了一个Forge UI上的插件。 **https://github.com/huchenlei/sd-…

国内有哪些可以交易上证50etf期权的平台?

随着期权交易的普及&#xff0c;越来越多的投资者开始关注期权交易app平台。期权开通方式有券商和期权分仓平台两种&#xff0c;目前期权交易费用是7元左右一张&#xff0c;期权佣金是可以根据券商的证券范围进行调整的&#xff0c;下文为大家科普国内有哪些可以交易上证50etf期…

接口入门(企业常见使用,一分钟搞定版)

目录 1、接口的定义 定义位置 接口内容 2、接口的使用 正常实现接口 接口当做函数参数 匿名实现接口 3、OPPO便签接口具体分析 总结一下&#xff1a; 1、接口的定义 定义位置 可以写在类中&#xff0c;但注意现在接口名字是 类名.接口名 可以单独写在一个文件 接口内…

Linux系统使用Docker安装RStudio服务并实现任意浏览器远程访问

文章目录 前言1. 安装RStudio Server2. 本地访问3. Linux 安装cpolar4. 配置RStudio server公网访问地址5. 公网远程访问RStudio6. 固定RStudio公网地址 前言 RStudio Server 使你能够在 Linux 服务器上运行你所熟悉和喜爱的 RStudio IDE&#xff0c;并通过 Web 浏览器进行访问…

OpenCV图像滤波(8)getGaborKernel()函数的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该函数返回 Gabor 滤波器系数。 Gabor 滤波器在图像处理中非常有用&#xff0c;特别是在纹理分析、特征提取和边缘检测等领域。 函数原型 Mat c…

借助树状数组的思想实现cuda版前缀和

昨天面试快手&#xff0c;面试官出了一个cuda编程题–实现前缀和。当时没有做出来&#xff0c;一直在思考是否有类似于规约树这样的解法&#xff0c;感觉好难……面试结束后搜了一下cuda前缀和的介绍&#xff0c;发现该问题是一个经典的cuda编程问题&#xff0c;NVIDIA很早之前…

论文解读,神经网络全梯度表示《Full-Gradient Representation for Neural Network Visualization》

导语 这篇论文介绍了一种新的工具&#xff0c;称为全梯度&#xff0c;用于解释神经网络的响应。这个全梯度的概念将神经网络的响应分解为两个部分&#xff1a;输入灵敏度和每个神经元的灵敏度分量。 输入灵敏度&#xff1a;输入灵敏度指的是对于神经网络输出的影响程度。它反…

node中使用http创建web服务器

1.案例代码 // 1.导入http模块 const http require(http)// 2.创建web服务器实例 const server http.createServer()// 3.为服务器实例绑定request事件&#xff0c;监听客户的请求 server.on(request,function(req,res){console.log(欢迎来到服务器);// req.url是客户端请求…

【Material-UI】Checkbox组件:标签使用详解

文章目录 一、Checkbox 组件与标签概述1. 组件介绍2. 基本用法 二、Checkbox 标签的关键特性1. 标签与复选框的结合2. 必填项3. 禁用状态4. 带有图标的复选框5. 多行标签 三、Checkbox 标签的实际应用场景1. 表单选择项2. 设置选项3. 同意条款 四、注意事项1. 无障碍支持2. 样式…

windows环境编译ffmpeg +visual studio 2022

最近在配置ffmpeg环境&#xff0c;记录一下坑点。 系统环境 visual stdio 2022 安装c桌面开发人员版 大概8g 实际下载2g左右&#xff0c;配置齐全其余不选。 然后环境配置&#xff0c;这里我使用别人的图&#xff0c;路劲都差不多。找到VS即可 PATH配置&#xff1a; 编译 …

Spring 三级缓存解决循环依赖源码分析

什么是循环依赖&#xff1f; ServiceA依赖ServiceB&#xff0c;ServiceB依赖ServiceA。 启动Spring项目时&#xff0c;如果想实例化ServiceA&#xff0c;创建完ServiceA对象后&#xff0c;需要依赖注入ServiceB的对象&#xff0c;而ServiceB实例化时&#xff0c;需要ServiceA&…

大模型场景应用全集:持续更新中

一、应用场景 1.办公场景 智能办公&#xff1a;文案生成&#xff08;协助构建大纲优化表达内容生成&#xff09;、PPT美化&#xff08;自动排版演讲备注生成PPT&#xff09;、数据分析&#xff08;生成公式数据处理表格生成&#xff09;。 智能会议&#xff1a;会议策划&…

C++之 bind 绑定器深入学习:从入门到精通!

简介 本文详细阐述了 C 中关于 bind 绑定器技术的基本概念和常用技巧。 引入动机 在标准算法库中&#xff0c;有一个算法叫 remove_if&#xff0c;其基本使用如下&#xff1a; #include <iostream> #include <string> #include <algorithm> #include &l…

FANUC发那科模块 A03B-0823-C003 I/0 EXT

IO模块接线 在FANUC系统中IO模块的种类比较多&#xff0c;每种IO模块的使用场合也不相同&#xff0c;每种IO模块的接线脚位也有很大区别&#xff0c;对于电气设计人员来说&#xff0c;清楚知道常用IO模块的接线脚位&#xff0c;才能更好的规划地址、设计图纸&#xff0c;对于设…

MySQL多表

表关系 1.一对多 应用场景 班级和学生 部门和员工 建表原则 设置&#xff08;ForeginKey&#xff09;外键连接 一个表的外键即为另外一张表的主键,以此简历两张表的关系 因此需要再学生表中新增一列&#xff0c;命名为 班级表_id&#xff0c;即班级表的主键&#xff0c;又叫…

【力扣】572.另一棵树的子树

题目描述 给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看…

电脑屏幕录制工具分享5款,附上详细电脑录屏教程(2024全新)

日月更迭&#xff0c;转眼间已经来到了2024年的立秋&#xff0c;在这个数字技术快速发展的时代&#xff0c;电脑录屏技术已经成为了一项不可或缺的技能&#xff0c;无论是用于工作汇报、在线教学、游戏直播还是个人娱乐。那么录屏软件哪个好用呢&#xff1f;接下来&#xff0c;…

QT按钮组

目录 按钮组 Push Button&#xff08;按钮&#xff09; Tool Button&#xff08;图片文字&#xff09; Radio Button(单选&#xff09; Check Button(多选) Command Link Button Dialog Button Box(对话按钮&#xff09; 按钮组 Push Button&#xff08;按钮&#xff09…