Appearance
20250225-SpringBoot3使用Swagger3
Swagger是一个用于设计、构建、文档化和使用RESTful Web服务的开源工具。Swagger3是Swagger的最新版本,它提供了许多新功能和改进。
Swagger在SpringBoot3中的引入方法发生了改变,因此记录一下。
依赖引入
构建一个 SpringBoot3 的项目,在pom.xml中添加 springdoc-openapi-starter-webmvc-ui
依赖。
xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.4.3</version>
<relativePath/>
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.0.4</version>
</dependency>
快速启动
在application.yml中配置
yaml
springdoc:
swagger-ui:
path : /swagger-ui.html
3.启动项目访问swagger
访问 http://localhost:8080/swagger-ui/index.html#/
使用注解标注接口
Swagger配置文件
java
package com.sumo.ipd.config;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class Swagger3Config {
@Bean
public OpenAPI springOpenAPI() {
// 访问路径:http://localhost:9090/swagger-ui/index.html
return new OpenAPI().info(new Info()
.title("SpringDoc API")
.description("SpringDoc Simple Application")
.version("0.0.1"));
}
}
Swagger 注解迁移
Swagger2 和 Swagger3 使用的是完全不同的两套注解,所以原本使用 Swagger2 相关注解的代码页需要完全迁移,改为使用 Swagger3 的注解。
Swagger2 | Swagger3 |
---|---|
@Api | @Tag |
@ApiOperation | @Operation |
@ApiImplicitParams | @Parameters |
@ApiImplicitParam | @Parameter |
@ApiModel | @Schema |
@ApiModelProperty | @Schema |
@ApiResponses | @ApiResponses |
@ApiResponse | @ApiResponse |
@ApiIgnore | @Hidden 或者 其他注解的 hidden = true 属性 |
举例五种常用
@Api
Swagger2 代码
java
@Api(value = "用户接口", tags = "UserController")
Swagger3 代码
java
@Tag(name = "UserController", description = "用户接口")
@ApiOperation
Swagger2 代码
java
@ApiOperation(value = "查询用户数据")
Swagger3 代码
java
@Operation(description = "查询用户数据")
@ApiImplicitParam
Swagger2 代码
java
@ApiImplicitParams({
@ApiImplicitParam(name = "currentPage", value = "当前页码", dataTypeClass = Integer.class, required = true),
@ApiImplicitParam(name = "size", value = "当前页大小", defaultValue = "10", dataTypeClass = Integer.class),
@ApiImplicitParam(name = "queryUser", value = "用户查询条件", dataTypeClass = User.class)
})
Swagger3 代码
java
@Parameters({
@Parameter(name = "currentPage", description = "当前页码", required = true),
@Parameter(name = "size", description = "当前页大小", example = "10"),
@Parameter(name = "queryUser", description = "用户查询条件")
})
@ApiModel
Swagger2 代码
java
@ApiModel(value = "用户信息实体类")
Swagger3 代码
java
@Schema(name = "用户信息实体类")
@ApiModelProperty
Swagger2 代码
java
@ApiModelProperty(value = "用户名称")
Swagger3 代码
java
@Schema(name = "用户名称")
使用示例
java
package com.sumo.ipd.controller;
import com.sumo.ipd.annotation.BusLog;
import com.sumo.ipd.entity.Department;
import com.sumo.ipd.entity.User;
import com.sumo.ipd.enums.Sex;
import com.sumo.ipd.enums.UserStatus;
import com.sumo.ipd.service.DepartmentService;
import com.sumo.ipd.service.UserService;
import com.sumo.ipd.utils.ExcelUtil;
import com.sumo.ipd.utils.PwdUtil;
import com.sumo.ipd.vo.LoginToken;
import com.sumo.ipd.vo.R;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpSession;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.*;
@RestController
@RequestMapping("user")
@CrossOrigin
@Tag(name = "UserController", description = "用户接口")
public class UserController {
@Resource
UserService userService;
@Resource
DepartmentService departmentService;
/**
* 用户注册
*
* @param registerUser
* @return
*/
@Operation(description = "用户注册")
@PostMapping("register")
public R register(@RequestBody User registerUser) {
if (userService
.query()
.eq(User.COL_CERTIFICATENO, registerUser.getCertificateNo())
.count() > 0) {
return R.builder().code(0).message("用户已存在!").build();
} else {
userService.save(registerUser);
return R.builder().code(200).message("注册成功!请等待组织管理员审核...").build();
}
}
}