欢迎来到我的小天地,这里是我记录技术点滴、分享学习心得的地方。📚
🛠️ 技能清单
- 编程语言:Java、C、C++、Python、Go、
- 前端技术:Jquery、Vue.js、React、uni-app、Echarts
- UI设计: Element-ui、Antd、Color-ui
- 后端技术:Spring Boot、Mybatis-plus、Swagger
- 移动开发:Android
- 操作系统:Windows、Linux
- 开发框架:RuoYi、微信小程序
- 开发工具:VSCode、IDEA、Eclipse、WebStorm、HbuildX、Navicat、Xshell、Android Studio、Postman
- 数据库技术:MySQL、Redis、SQL Server
- 版本控制:Git
Swagger是一个用于设计、构建、记录和使用RESTful web服务的开源软件框架。Swagger 3(OpenAPI 3.0)提供了更加强大和灵活的API文档生成能力。本教程将指导您如何在Spring Boot 3项目中集成Swagger3,并使用Knife4j作为UI界面。
首先,您需要在项目的pom.xml文件中添加Swagger3的依赖。同时,为了确保依赖能够正确下载,您可以添加阿里云的Maven镜像仓库。
com.github.xiaoymin
knife4j-openapi3-jakarta-spring-boot-starter
4.1.0
alimaven
aliyun maven
https://maven.aliyun.com/nexus/content/groups/public/
true
true
在Spring Boot项目中创建一个配置类SwaggerConfig,并添加Swagger的配置信息。
import io.swagger.v3.oas.models.ExternalDocumentation;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
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;
@Configuration
public class SwaggerConfig {
@Bean
public OpenAPI springShopOpenAPI() {
return new OpenAPI()
.info(new Info().title("标题")
.contact(new Contact())
.description("我的API文档")
.version("v1")
.license(new License().name("Apache 2.0").url("http://springdoc.org")))
.externalDocs(new ExternalDocumentation()
.description("外部文档")
.url("https://springshop.wiki.github.org/docs"));
}
}
在您的实体类和控制层中使用Swagger注解来描述API。
// 实体类注解示例
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.util.Date;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@Schema(name = "Employee", description = "$!{table.comment}")
public class Emp {
@ExcelProperty("ID")
@Schema(description = "ID")
private int id;
@ExcelProperty("用户名")
@Schema(description = "用户名")
private String names;
@ExcelProperty("工资")
@Schema(description = "工资")
private double salary;
@ExcelProperty("生日")
@Schema(description = "生日")
private Date birthday;
@ColumnWidth(20)
@ExcelProperty("头像")
@Schema(description = "头像")
private String photo;
// @ColumnWidth(20)
// @DateTimeFormat("yyyy-MM-dd HH:mm:ss")
// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
// @ExcelProperty("创建日期")
// private Date u_create_time;
}
// 控制层注解示例
import io.swagger.v3.oas.annotations.Operation;
@Operation(summary = "获取所有员工信息")
@GetMapping("/selectAll")
public List selectAll() {
// ...
}
创建一个通用的返回结果类,用于统一API的响应格式。
import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; @Builder(toBuilder = true) @AllArgsConstructor @Setter @Getter @Slf4j public class Result{ /** * 提示信息 */ @Schema(description = "提示信息") private String message; /** * 是否成功 */ @Schema(description = "是否成功") private boolean success; /** * 返回状态码 */ @Schema(description = "返回状态码") private Integer code; /** * 数据 */ @Schema(description = "数据") private T data; public Result() { } public static Result success() { Result Result = new Result(); Result.setSuccess(Boolean.TRUE); Result.setCode(ResultCode.SUCCESS.getCode()); Result.setMessage(ResultCode.SUCCESS.getMsg()); return Result; } public static Result success(String msg) { Result Result = new Result(); Result.setMessage(msg); Result.setSuccess(Boolean.TRUE); Result.setCode(ResultCode.SUCCESS.getCode()); return Result; } public static Result success(Object data) { Result Result = new Result(); Result.setData(data); Result.setSuccess(Boolean.TRUE); Result.setCode(ResultCode.SUCCESS.getCode()); Result.setMessage(ResultCode.SUCCESS.getMsg()); return Result; } /** * 返回失败 消息 * * @return Result */ public static Result failure() { Result Result = new Result(); Result.setSuccess(Boolean.FALSE); Result.setCode(ResultCode.FAILURE.getCode()); Result.setMessage(ResultCode.FAILURE.getMsg()); return Result; } /** * 返回失败 消息 * * @param msg 失败信息 * @return Result */ public static Result failure(String msg) { Result Result = new Result(); Result.setSuccess(Boolean.FALSE); Result.setCode(ResultCode.FAILURE.getCode()); Result.setMessage(msg); return Result; } public static Result failure(Integer code, String msg) { Result Result = new Result(); Result.setSuccess(Boolean.FALSE); Result.setCode(code); Result.setMessage(msg); return Result; } public static Result failure(String msg, ResultCode exceptionCode) { Result Result = new Result(); Result.setMessage(msg); Result.setSuccess(Boolean.FALSE); Result.setCode(exceptionCode.getCode()); Result.setData(exceptionCode.getMsg()); return Result; } /** * 返回失败 消息 * * @param exceptionCode 错误信息枚举 * @return Result */ public static Result failure(ResultCode exceptionCode) { Result Result = new Result(); Result.setSuccess(Boolean.FALSE); Result.setCode(exceptionCode.getCode()); Result.setMessage(exceptionCode.getMsg()); return Result; } /** * 返回失败 消息 * * @param exceptionCode 错误信息枚举 * @param msg 自定义错误提示信息 * @return Result */ public static Result failure(ResultCode exceptionCode, String msg) { Result Result = new Result(); Result.setMessage(msg); Result.setSuccess(Boolean.FALSE); Result.setCode(exceptionCode.getCode()); return Result; } }
Swagger3的注解与Swagger2有所不同,以下是一些常用注解的对照表:
| Swagger2注解 | Swagger3注解 | 注解位置 |
|---|---|---|
| @Api | @Tag(name = “接口类描述”) | Controller类上 |
| @ApiOperation | @Operation(summary = “接口方法描述”) | Controller方法上 |
| @ApiImplicitParams | @Parameters | Controller方法上 |
| @ApiImplicitParam | @Parameter(description = “参数描述”) | Controller方法上 |
| @ApiParam | @Parameter(description = “参数描述”) | 方法参数上 |
| @ApiIgnore | @Parameter(hidden = true) 或 @Operation(hidden = true) | - |
| @ApiModel | @Schema | DTO类上 |
| @ApiModelProperty | @Schema | DTO属性上 |
启动您的Spring Boot应用后,您可以通过以下地址访问Swagger UI:
http://localhost:8080/doc.html http://localhost:8080/swagger-ui/index.html
在这里,您可以查看API文档,测试API接口,并获取相关信息。
如果您对我们的项目感兴趣,或者有任何技术问题想要探讨,欢迎通过以下方式与我联系。我非常期待与您交流,共同学习,共同进步!
感谢你的访问,如果你对我的技术文章或项目感兴趣,欢迎通过以上方式与我联系。让我们一起在技术的道路上不断前行!🚀