11.Spring Boot 3.1.5 中使用 SpringDoc OpenAPI(替代 Swagger)生成 API 文档

Spring Boot 3.1.5 中使用 SpringDoc OpenAPI(替代 Swagger)生成 API 文档


1. 项目结构

假设项目名为 springboot-openapi-demo,以下是项目的基本结构:

springboot-openapi-demo/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── example/
│   │   │           └── demo/
│   │   │               ├── DemoApplication.java        # 主启动类
│   │   │               ├── config/                     # 配置类目录
│   │   │               │   └── OpenApiConfig.java      # OpenAPI 配置类
│   │   │               ├── controller/                 # 控制器目录
│   │   │               │   └── UserController.java     # 示例控制器
│   │   │               └── model/                      # 模型类目录
│   │   │                   └── User.java               # 用户模型类
│   │   └── resources/
│   │       └── application.properties                 # 配置文件
└── pom.xml                                             # Maven 依赖配置

2. 创建 pom.xml 并添加依赖

pom.xml 中添加 Spring Boot 和 SpringDoc OpenAPI 的依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.5</version>
        <relativePath/> <!-- 查找父 POM 的位置 -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>springboot-openapi-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-openapi-demo</name>
    <description>Spring Boot 3.1.5 + SpringDoc OpenAPI 示例</description>

    <properties>
        <java.version>17</java.version> <!-- 指定 JDK 17 -->
        <springdoc-openapi.version>2.3.0</springdoc-openapi.version> <!-- SpringDoc 版本 -->
    </properties>

    <dependencies>
        <!-- Spring Boot Web 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- SpringDoc OpenAPI UI 依赖(用于生成 Swagger UI) -->
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
            <version>${springdoc-openapi.version}</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

3. 创建主启动类 DemoApplication.java

src/main/java/com/example/demo/DemoApplication.java 中创建主启动类:

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * Spring Boot 主启动类
 * 用于启动整个应用
 */
@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

在这里插入图片描述

4. 创建 OpenAPI 配置类 OpenApiConfig.java

src/main/java/com/example/demo/config/OpenApiConfig.java 中配置 OpenAPI:

package com.example.demo.config;

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * OpenAPI 配置类
 * 用于自定义 API 文档的元信息(如标题、描述、版本等)
 */
@Configuration
public class OpenApiConfig {

    /**
     * 自定义 OpenAPI 实例
     * @return 配置好的 OpenAPI 对象
     */
    @Bean
    public OpenAPI customOpenAPI() {
        return new OpenAPI()
                .info(new Info()
                        .title("Spring Boot 3.1.5 API 文档") // API 文档标题
                        .description("这是一个使用 SpringDoc OpenAPI 生成的示例 API 文档") // 描述
                        .version("1.0") // 版本号
                        .license(new License() // 许可证信息
                                .name("Apache 2.0") // 许可证名称
                                .url("https://www.apache.org/licenses/LICENSE-2.0"))); // 许可证 URL
    }
}

在这里插入图片描述

对应效果:
在这里插入图片描述

5. 创建用户模型类 User.java

(/swagger-ui/index.html和/v3/api-docs里都没看到这个类里的的信息,后面有需要可以研究研究)

src/main/java/com/example/demo/model/User.java 中创建用户模型类:

package com.example.demo.model;

import io.swagger.v3.oas.annotations.media.Schema;

/**
 * 用户实体类
 * 用于表示用户的基本信息
 */
@Schema(description = "用户实体") // 描述该类的用途
public class User {

    @Schema(description = "用户 ID", example = "1") // 描述字段的用途和示例值
    private Long id;

    @Schema(description = "用户名", example = "john_doe")
    private String username;

    // Getters 和 Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}

在这里插入图片描述

6. 创建用户控制器 UserController.java

src/main/java/com/example/demo/controller/UserController.java 中创建用户控制器:

package com.example.demo.controller;

import com.example.demo.model.User;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.*;

/**
 * 用户管理控制器
 * 提供用户相关的 RESTful API
 */
@RestController
@RequestMapping("/api/users") // 基础路径
@Tag(name = "用户管理", description = "用户相关的 API 接口") // 分类标签
public class UserController {

    /**
     * 根据用户 ID 获取用户信息
     * @param id 用户 ID
     * @return 用户信息字符串
     */
    @GetMapping("/{id}")
    @Operation(summary = "获取用户信息", description = "根据用户 ID 获取用户详情") // 操作描述
    public String getUser(@PathVariable Long id) {
        return "User ID: " + id;
    }

    /**
     * 创建新用户
     * @param userData 用户数据(示例中为字符串,实际应为 User 对象)
     * @return 创建结果
     */
    @PostMapping
    @Operation(summary = "创建用户", description = "创建新用户") // 操作描述
    public String createUser(@RequestBody String userData) {
        return "Created user: " + userData;
    }
}

在这里插入图片描述
在这里插入图片描述

对应效果:
在这里插入图片描述

7. 配置 application.properties

src/main/resources/application.properties 中添加基本配置:
F

# 应用名称
spring.application.name=springboot-openapi-demo

# 服务器端口
server.port=8080

# 日志配置(可选)
logging.level.org.springframework=INFO

在这里插入图片描述

8. 启动应用并访问 Swagger UI

  1. 启动 DemoApplication 主类。
  2. 访问以下 URL 查看 Swagger UI:
    • http://localhost:8080/swagger-ui.html(SpringDoc 默认路径)
    • http://localhost:8080/v3/api-docs(查看原始 OpenAPI 3.0 JSON)
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

9. 代码注释说明

  • 类注释
    • 描述类的用途(如 User 类表示用户实体)。
  • 方法注释
    • 描述方法的功能、参数和返回值(如 getUser 方法根据 ID 获取用户)。
  • 注解注释
    • 解释注解的作用(如 @Tag 用于分类 API,@Operation 用于描述操作)。
  • 配置类注释
    • 解释配置的作用(如 OpenApiConfig 用于自定义 API 文档的元信息)。

10. 总结

  • 依赖:使用 springdoc-openapi-starter-webmvc-ui 替代 springfox
  • 配置:通过 OpenApiConfig 自定义 API 文档信息。
  • 注解:使用 @Tag@Operation 等注解丰富 API 文档。
  • 启动:访问 http://localhost:8080/swagger-ui.html 查看文档。

这种方式完全兼容 Spring Boot 3.1.5 和 JDK 17,且功能强大、易于维护。

<think>好的,我现在需要回答用户关于在Spring Boot 3.1.5中集成Spring Cloud进行微服务架构开发的问题。首先,我需要结合用户提供的引用内容,特别是引用[1]、[2]、[4]中的信息,来构建一个清晰的步骤指南。 用户提到的引用[1]解释了Spring Cloud和Spring Boot的关系,强调Spring Boot用于开发单个微服务,而Spring Cloud负责协调和管理这些微服务。因此,在集成时,需要明确两者的版本兼容性。引用[4]提到Spring Boot 3.1.5对应的Spring Cloud版本是2022.0.4,这需要作为依赖管理的基础。 接下来,用户可能需要知道如何设置父项目,管理依赖版本。根据引用[4],应该在pom.xml中使用dependencyManagement引入Spring Cloud的BOM,确保所有子模块使用统一的版本。同时,引用[2]提到Spring Boot升级到3.1.5需要注意迁移指南,因此要确认所有依赖库是否兼容,特别是Spring Cloud组件。 然后,用户需要添加具体的Spring Cloud组件,比如服务发现(Eureka)、配置中心(Config)、API网关等。引用[4]中的例子是Eureka注册中心,所以应该详细说明如何配置Eureka Server和Client,包括依赖添加和配置文件设置。 另外,用户可能需要了解如何启用Spring Cloud的功能,比如使用@EnableEurekaServer注解,这属于代码层面的配置。引用[3]提到了@SpringBootConfiguration和@EnableAutoConfiguration,但用户的问题更关注Spring Cloud的集成,所以重点放在相关的注解和配置上。 最后,用户可能关心实际应用中的例子,比如创建一个简单的微服务并进行服务注册与发现。需要提供代码示例,例如启动类、配置文件以及服务调用的方法。同时,测试步骤也是重要的,比如如何启动Eureka服务器和客户端,并验证它们是否正常注册。 还需要注意,用户提供的引用中有关于Dubbo和Spring Cloud的对比,但用户的问题主要集中在Spring Cloud,因此可能不需要深入比较,但可以作为扩展内容提及。 总结步骤应该是:版本匹配、依赖管理、添加组件依赖、配置注册中心、创建微服务模块、测试验证。同时,要确保所有步骤符合Spring Boot 3.1.5Spring Cloud 2022.0.4的兼容性要求,并引用正确的文档和迁移指南。</think>### Spring Boot 3.1.5集成Spring Cloud微服务架构开发指南 #### 1. **版本兼容性匹配** - **Spring Boot 3.1.5** 需搭配 **Spring Cloud 2022.0.4**(对应Spring Cloud版本命名规则为"Kilburn")[^4]。 - 在父项目的`pom.xml`中通过`dependencyManagement`统一管理依赖版本: ```xml <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>2022.0.4</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> ``` #### 2. **添加Spring Cloud核心组件** - **服务注册与发现(Eureka)**: 1. **Eureka Server**:添加依赖并配置服务端: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> ``` 启动类添加注解: ```java @SpringBootApplication @EnableEurekaServer public class EurekaServerApplication { ... } ``` 配置文件`application.yml`: ```yaml server: port: 8761 eureka: client: register-with-eureka: false # 不向自身注册 fetch-registry: false ``` 2. **Eureka Client**:在微服务模块中添加客户端依赖: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> ``` 配置文件中指定注册中心地址: ```yaml eureka: client: service-url: defaultZone: http://localhost:8761/eureka/ ``` - **配置中心(Spring Cloud Config)**: 1. 添加依赖: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> ``` 2. 启动类启用配置服务: ```java @EnableConfigServer @SpringBootApplication public class ConfigServerApplication { ... } ``` #### 3. **微服务模块开发** - 每个微服务模块需独立配置,例如`user-service`和`order-service`: ```java @SpringBootApplication @EnableDiscoveryClient // 启用服务发现 public class UserServiceApplication { ... } ``` - 使用`RestTemplate`或`OpenFeign`实现服务间调用: ```java @Bean @LoadBalanced // 启用负载均衡 public RestTemplate restTemplate() { return new RestTemplate(); } ``` #### 4. **测试与验证** 1. 启动Eu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值