SpringBoot 3.x 整合swagger

目录

一、简介

二、基本使用

[1. 引入依赖](#1. 引入依赖)

[2. 其它相关依赖](#2. 其它相关依赖)

[2. 编写配置文件](#2. 编写配置文件)

[3. 配置Swagger文档基本信息](#3. 配置Swagger文档基本信息)

[4.?控制 Swagger 的开启](#4.?控制 Swagger 的开启)

[?编辑?5. 完善Swagger文档](#?编辑?5. 完善Swagger文档)

[5.1 实体类添加Swagger注解](#5.1 实体类添加Swagger注解)

5.2?控制器注解解析

[6. 接口调用](#6. 接口调用)

三、使用postman进行接口测试

[1. 导入链接](#1. 导入链接)

四、代码


一、简介

官网:https://swagger.io/

对于SpringBoot而言,Swagger的作用是通过后端SpringBoot代码快速生成接口文档,方便测试接口以及前端使用。

二、基本使用

由于springfox不适用于SpringBoot3.x,故使用Springdoc进行代替。

1. 引入依赖
复制代码
		<dependency>
			<groupId>org.springdoc</groupId>
			<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
			<version>2.6.0</version>
		</dependency>
2. 其它相关依赖
复制代码
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>


		<!-- 让响应结果更美观 -->
		<dependency>
			<groupId>com.alibaba.cola</groupId>
			<artifactId>cola-component-dto</artifactId>
			<version>4.3.2</version>
		</dependency>
2. 编写配置文件

添加 swagger 的配置文件SwaggerConfig.java

复制代码
@Configuration
public class SwaggerConfig {

}

此时Swagger已经简单整合成功,运行SpringBoot服务,浏览器打开网址进行测试

复制代码
http://localhost:8080/swagger-ui/index.html

我使用的是8081端口,因此我使用下面的链接打开

复制代码
http://localhost:8081/swagger-ui/index.html
3. 配置Swagger文档基本信息
复制代码
@Configuration
public class SwaggerConfig {
    /*
    配置swagger基本信息
     */
    @Bean
    public OpenAPI swaggerOpenApi() {
        return new OpenAPI()
                .info(new Info().title("Swagger学习-")
                        .description("Swagger简单入门")
                        .version("v1.0"))
                .externalDocs(new ExternalDocumentation()
                        .description("我的博客")
                        .url("https://blog.csdn.net/2202_76007821?spm=1000.2115.3001.5343"));
    }
}

此时重新运行服务,打开网址

复制代码
http://localhost:8081/swagger-ui/index.html
4.控制 Swagger 的开启

在开发或者测试环境下,我们开启 swagger 会方便前端和后端的交互,但是如果在生产环境下也开启 swagger 的话,是会将接口暴露出去的,有极大风险,如何让 swagger 根据不同的环境来决定是否开启?

这里我准备了四个项目的配置文件,devprod两个环境的配置文件仅是端口上的不同

application.yml -------------------------- 全局配置文件

application-dev.yml -------------------- 开发环境配置文件

application-prod.yml -------------------- 生产环境配置文件

application-dev.yml配置

复制代码
springdoc:
  api-docs:
    enabled: true # 开启OpenApi接口
  swagger-ui:
    enabled: true # 开启swagger界面,依赖OpenApi,需要OpenApi同时开启

application-prod.yml配置

复制代码
springdoc:
  api-docs:
    enabled: false # 关闭OpenApi接口
  swagger-ui:
    enabled: false # 关闭swagger界面

application.yml内容如下,用于指定选择的环境:

复制代码
spring:
  profiles:
    active: dev

application.yml全局配置文件中环境指向dev时,是可以打开 swagger 的

如果我将application.yml全局配置文件中环境指向prod时,就不能打开 swagger 了

5. 完善Swagger文档
5.1 实体类添加Swagger注解
复制代码
@Component
@Schema(title = "水果类")
public class Fruit {
    @Schema(title = "水果名称",example = "塔菲新式番茄",minLength = 1,maxLength = 100)
    private String name;
    @Schema(title = "水果数量",example = "520")
    private Integer num ;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getNum() {
        return num;
    }

    public void setNum(Integer num) {
        this.num = num;
    }
}

@Schema: Swagger文档的注解,用于说明类/字段

  • title: 类/字段说明
  • example: 示例,Swagger中会将这个字段作为示例
  • minLength/maxLength: 最小/最大长度,字段为String类型时生效(仅用于文档说明,不会抛出异常)
5.2控制器注解解析
复制代码
@RestController
@RequestMapping("/fruit")
@Tag(name = "水果控制器",description = "这是水果测试接口")
public class FruitController {
    @PostMapping("/add")
    @Operation(summary = "新增水果",description = "这是新增水果的方法")
    public String add(Fruit fruit) {
        return "新增成功";
    }
}
  • @Tag: 控制器说明

    • name: 名称
    • description: 描述说明
  • @Operation: 请求说明

    • summary: 说明,Swagger页面在方法后面,不会被折叠
    • descirption: 描述,会被折叠到方法说明中

配置之后,让我们打开网址查看一下

6. 接口调用

点击进行测试

测试成功

三、使用postman进行接口测试

1. 导入链接

回到文档头部,点击api-docs

复制链接

打开postman,点击import

选择第二个进行导入

baseurl问题使用环境进行统一修改即可,点击创建新环境

手动修改参数

点击进行测试

四、代码

代码已经上传到gitee,打开网址,点击下载zip即可

复制代码
https://gitee.com/guirongyuan/swagger-leaning
相关推荐
一灯架构2 小时前
90%的人答错!一文带你彻底搞懂ArrayList
java·后端
Y4090013 小时前
【多线程】线程安全(1)
java·开发语言·jvm
布局呆星4 小时前
SpringBoot 基础入门
java·spring boot·spring
mldong4 小时前
Python开发者狂喜!200+课时FastAPI全栈实战合集,10大模块持续更新中🔥
后端
不懂的浪漫4 小时前
mqtt-plus 架构解析(六):多 Broker 管理,如何让一个应用同时连接多个 MQTT 服务
spring boot·分布式·物联网·mqtt·架构
风吹迎面入袖凉4 小时前
【Redis】Redisson的可重入锁原理
java·redis
w6100104664 小时前
cka-2026-ConfigMap
java·linux·cka·configmap
GreenTea4 小时前
从 Claw-Code 看 AI 驱动的大型项目开发:2 人 + 10 个自治 Agent 如何产出 48K 行 Rust 代码
前端·人工智能·后端
不懂的浪漫4 小时前
mqtt-plus 架构解析(十):从内部项目到开源框架,mqtt-plus 的抽取过程与决策
spring boot·mqtt·架构·开源