首页 > 其他分享 >Spring Cloud微服务项目聚合Swagger文档

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

时间:2024-08-08 18:58:38浏览次数:15  
标签:Knife4j group name service Spring api 文档 Swagger Cloud

        在微服务架构中,每个服务通常都有自己独立的 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("[email protected]")));

    }

}

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.启动网关服务

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

 

标签:Knife4j,group,name,service,Spring,api,文档,Swagger,Cloud
From: https://blog.csdn.net/qq_56046190/article/details/141030823

相关文章

  • Springboot计算机毕业设计高校实验室管理系统(程序)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表学生,教师,实验课程,课程打卡,实验报告,实验成绩,实验设备,耗材信息,耗材申请开题报告内容一、选题背景与意义1.选题背景随着高校教学科研水平的不断提升,实验......
  • Springboot计算机毕业设计高校实验室管理系统的设计与实现x1ir2
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表部门,教师,学生,实验室信息,学生预约,教师预约,耗材分类,耗材信息,耗材入库,学生领用,教师领用,学生借用,教师借用,学生归还,教师归还,购置计划开题报告内容一、......
  • Springboot计算机毕业设计高校女生的饮食营养管理系统(程序+源码+数据库+调试部署+开发
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,个人食谱,特殊食谱,饮食类型,运动打卡,饮食登记开题报告内容一、研究背景与意义1.1研究背景随着社会经济的快速发展和人们生活水平的不断提高,人们对健康......
  • Springboot计算机毕业设计高校实验室仪器设备管理系统msvhp
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,设备信息,设备分类,购置计划,报废申请,申请调拨,供应商,资产登记,采购入库,报废出库,调拨出库,公告信息开题报告内容一、选题背景与意义1.选题背景随着......
  • Springboot计算机毕业设计高校培养方案管理系统(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表教务处,系部负责人,专业负责人,理论课程,教学安排,课程,教师信息,院系,年级,专业,班级,学生,实践课程开题报告内容一、研究背景与意义研究背景随着教育信息化......
  • Spring Boot集成Resilience4J实现限流/重试/隔离
    在现代分布式系统中,可靠性和弹性是至关重要的。Resilience4J是一个专注于提高应用程序弹性和容错能力的库,它提供了多种模式,包括限流(RateLimiter)、重试(Retry)和隔离(Bulkhead)。在这篇文章中,我们将探讨如何在SpringBoot中集成Resilience4J,并分别展示如何实现这三种模式。一、限......
  • Springboot整合Flowable入门-学习笔记
    目录1、定义流程(画图)2、Springboot部署流程3、Springboot删除所有流程4、Springboot根据流程部署ID查询流程定义ID5、Springboot启动(发起)流程6、Springboot查询任务6.1全部任务6.2我的任务(代办任务)7、springboot审批任务1、审批通过2、驳回8、Springboot流程......
  • Java毕业设计 基于Springboot+Vue的电影院剧院订票选座管理系统(源码+lw+部署文档+讲
    文末获取资源,收藏关注不迷路文章目录项目介绍功能需求技术介绍项目界面关键代码目录项目介绍随着经济的发展和信息技术的普及,国内许多企业都面临了重大的挑战。企业的管理流程、战略规划如果不能进行调整,极有可能面临淘汰的风险。特别是郑州大剧院,面对大量的会员和......
  • SpringBoot属性配置方式
    问题:如果我们需要修改端口号为其他的端口号,那么我们可以在.yml文件中通过serverport直接对端口进行修改。但是如果我们交给运维或者客户的是一个jar包而不是项目的源文件,他们没有办法直接修改这些属性,这时候就需要SpringBoot属性配置相关的知识了。我们之前学习的是在reso......
  • springboot 集成阿里云短信服务,教你轻松实现短信发送功能
    springboot如何发送短信功能在SpringBoot中实现手机号发送短信功能,一般可以通过以下步骤:一、选择短信服务提供商这里使用了阿里云短信服务的SDK来发送短信。阿里云官网:https://www.aliyun.com/1.1开通短信服务进入短信服务控制台,依照如下步骤进行申请1.2新......