Spring Boot如何实现接口文档自动生成
Spring Boot如何实现接口文档自动生成
在开发Web应用程序时,接口文档是非常重要的一环,它可以帮助我们快速了解API的功能和使用方法,同时也是与其他开发人员和团队协作的重要工具。然而,手动编写和维护接口文档是一项繁琐的工作,容易出现遗漏和错误。为此,我们可以使用Spring Boot提供的一些工具和框架,实现接口文档自动生成,以提高开发效率和文档质量。

Swagger简介
Swagger是一种RESTful API文档生成工具,可以自动生成接口文档、API测试和客户端代码等。它通过注解方式标记API的信息,然后根据这些信息生成API的文档和测试页面。Swagger支持多种语言和框架,包括Java和Spring Boot。在本文中,我们将介绍如何使用Swagger实现Spring Boot接口文档自动生成。
集成Swagger
添加依赖项
首先,我们需要在Spring Boot项目中添加Swagger的依赖项。在pom.xml文件中添加以下依赖项:
<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version>
</dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version>
</dependency>
其中,springfox-swagger2是Swagger的核心依赖,springfox-swagger-ui是Swagger的UI组件,用于展示接口文档和测试页面。
配置Swagger
在添加了Swagger的依赖项后,我们需要配置Swagger的相关信息。在Spring Boot应用程序的配置类中,我们可以使用@EnableSwagger2注解启用Swagger,并使用@Configuration注解指定配置类。具体的代码如下:
@Configuration
@EnableSwagger2
public class SwaggerConfig {@Beanpublic Docket api() {return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.basePackage("com.example.demo.controller")).paths(PathSelectors.any()).build().apiInfo(apiInfo());}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("Spring Boot接口文档").description("Spring Boot接口文档").version("1.0.0").build();}
}
在上述代码中,我们创建了一个名为SwaggerConfig的配置类,并使用@EnableSwagger2注解启用Swagger。在api方法中,我们使用Docket对象配置Swagger的相关信息,包括扫描的API包、API路径和文档信息等。其中,RequestHandlerSelectors.basePackage指定扫描的API包,PathSelectors.any指定扫描所有的API路径。在apiInfo方法中,我们使用ApiInfoBuilder对象配置文档的标题、描述和版本号等信息。
标记API信息
在配置了Swagger后,我们需要在API的方法上添加Swagger的注解,以标记API的信息。以下是常用的Swagger注解:
- @Api:用于标记API的信息,包括API的名称、描述和版本号等。
- @ApiOperation:用于标记API方法的信息,包括方法的名称、描述和HTTP方法等。
- @ApiParam:用于标记API方法的参数信息,包括参数的名称、描述和数据类型等。
- @ApiResponse:用于标记API方法的响应信息,包括响应的HTTP状态码、描述和响应数据类型等。
- @ApiModel:用于标记API的数据模型信息,包括数据模型的名称、描述和字段信息等。
- @ApiModelProperty:用于标记API数据模型的字段信息,包括字段的名称、描述和数据类型等。
以下是一个使用Swagger注解的示例:
@RestController
@RequestMapping("/users")
@Api(value = "用户管理", tags = "用户管理API")
public class UserController {@Autowiredprivate UserService userService;@GetMapping("")@ApiOperation(value = "获取所有用户", notes = "获取所有用户的信息")public List<User> getUsers() {return userService.getUsers();}@GetMapping("/{id}")@ApiOperation(value = "获取用户信息", notes = "根据ID获取用户的信息")public User getUserById(@PathVariable("id") long id) {return userService.getUserById(id);}@PostMapping("")@ApiOperation(value = "创建用户", notes = "创建一个新的用户")public User createUser(@RequestBody User user) {return userService.createUser(user);}@PutMapping("/{id}")@ApiOperation(value = "更新用户信息", notes = "根据ID更新用户的信息")public User updateUser(@PathVariable("id") long id, @RequestBody User user) {return userService.updateUser(id, user);}@DeleteMapping("/{id}")@ApiOperation(value = "删除用户", notes = "根据ID删除用户")public void deleteUser(@PathVariable("id") long id) {userService.deleteUser(id);}
}
在上述代码中,我们使用了@Api注解标记了API的信息,包括API的名称和描述等。在每个API方法上,我们使用了@ApiOperation注解标记了方法的信息,包括方法的名称、HTTP方法和方法的描述等。在参数上,我们使用了@ApiParam注解标记了参数的信息,包括参数的名称、描述和数据类型等。在返回值上,我们使用了@ApiResponse注解标记了响应的信息,包括响应的HTTP状态码、响应的描述和响应数据的类型等。
访问接口文档
在完成了以上步骤后,我们可以启动Spring Boot应用程序,并访问http://localhost:8080/swagger-ui.html,即可看到Swagger生成的接口文档和测试页面。在文档页面中,我们可以查看API的信息、参数和响应等详细信息,同时也可以进行接口测试。在测试页面中,我们可以选择HTTP方法、输入参数和请求头等信息,然后发送请求并查看返回结果。
Swagger常用配置
除了上述基本配置外,Swagger还提供了许多其他的配置选项,以满足不同的需求。以下是一些常用的Swagger配置选项:
配置分组
在实际开发中,一个应用程序可能包含多个API分组,每个分组对应不同的功能模块或业务场景。为了方便管理和查找API,我们可以使用Swagger的分组功能,将API分组展示。在配置类中,我们可以使用Docket的groupName方法指定API的分组名称,具体的代码如下:
@Bean
public Docket api() {return new Docket(DocumentationType.SWAGGER_2).groupName("users").select().apis(RequestHandlerSelectors.basePackage("com.example.demo.controller")).paths(PathSelectors.any()).build().apiInfo(apiInfo());
}
在上述代码中,我们使用groupName方法指定了API的分组名称为"users"。
配置全局参数
在实际开发中,我们可能会在请求头、路径参数或请求体中使用一些全局参数,如认证信息、API版本号等。为了不在每个API方法中都重复添加这些参数,我们可以使用Swagger的全局参数功能,将这些参数添加到API的文档中。在配置类中,我们可以使用Docket的globalOperationParameters方法指定全局参数,具体的代码如下:
@Bean
public Docket api() {List<Parameter> parameters = new ArrayList<>();parameters.add(new ParameterBuilder().name("Authorization").description("认证信息").modelRef(new ModelRef("string")).parameterType("header").required(false).build());parameters.add(new ParameterBuilder().name("version").description("API版本号").modelRef(new ModelRef("string")).parameterType("query").required(false).build());return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.basePackage("com.example.demo.controller")).paths(PathSelectors.any()).build().globalOperationParameters(parameters).apiInfo(apiInfo());
}
在上述代码中,我们使用了globalOperationParameters方法添加了两个全局参数,分别是Authorization和version。其中,ParameterBuilder用于创建参数对象,name指定参数名称,description指定参数描述,modelRef指定参数类型,parameterType指定参数位置。在Docket的globalOperationParameters方法中,我们将参数列表传递给Swagger,并添加到API文档中。
配置文档样式
在默认情况下,Swagger生成的文档样式可能与我们的项目风格不太一致,我们可以通过自定义样式文件来修改文档的外观。在Spring Boot应用程序中,我们可以创建一个public目录,并在其中创建一个swagger-ui.html文件和一个swagger.css文件。在swagger-ui.html文件中,我们可以引入自定义的样式文件,并覆盖默认样式。具体的代码如下:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Swagger UI</title><link rel="stylesheet" type="text/css" href="swagger.css"><linkrel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/3.10.0/swagger-ui.css" >
</head>
<body>
<div id="swagger-ui"></div><script src="https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/3.10.0/swagger-ui-bundle.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/3.10.0/swagger-ui-standalone-preset.js"></script>
<script>window.onload = function() {const ui = SwaggerUIBundle({url: "/v2/api-docs",dom_id: '#swagger-ui',presets: [SwaggerUIBundle.presets.apis,SwaggerUIStandalonePreset],layout: "BaseLayout",deepLinking: true,showExtensions: true,showCommonExtensions: true,docExpansion: "none"})}
</script>
</body>
</html>
在上述代码中,我们在head标签中引入了自定义的样式文件swagger.css和Swagger官方提供的样式文件swagger-ui.css。在body标签中,我们创建了一个id为swagger-ui的div,并在其中引入Swagger的JavaScript文件。在JavaScript中,我们使用SwaggerUIBundle对象创建Swagger UI的实例,设置url属性为"/v2/api-docs",表示API文档的URL地址。dom_id属性指定Swagger UI的渲染位置,presets属性指定使用的预设模板,layout属性指定文档的布局方式,deepLinking属性指定是否使用深度链接,showExtensions和showCommonExtensions属性指定是否显示扩展属性。在自定义的样式文件中,我们可以使用CSS规则修改文档的外观,如修改字体大小、颜色和背景等。
总结
本文介绍了如何使用Swagger实现Spring Boot接口文档自动生成。我们首先添加了Swagger的依赖项,并在配置类中启用了Swagger。然后,我们使用注解标记API的信息,并访问接口文档和测试页面。此外,我们还介绍了Swagger的常用配置选项,包括配置分组、全局参数和文档样式等。使用Swagger可以大大提高开发效率和文档质量,帮助我们更好地管理和维护API文档。
相关文章:
Spring Boot如何实现接口文档自动生成
Spring Boot如何实现接口文档自动生成 在开发Web应用程序时,接口文档是非常重要的一环,它可以帮助我们快速了解API的功能和使用方法,同时也是与其他开发人员和团队协作的重要工具。然而,手动编写和维护接口文档是一项繁琐的工作&…...
二进制概述-0day漏洞利用原理(1)
二进制利用基本原理,Lord PE的使用,凡是资源性的物质且可表达的皆可利用。 往期文章: 漏洞概述-0day漏洞利用原理(0)_luozhonghua2000的博客-CSDN博客 PE 文件格式 PE (Portable Exec utable) 是 Win32 平台下可执行文件遵守的数据格式。常见的可执行文件(如“*.exe”文件…...
加密与解密 调试篇 动态调试技术 (二)-常见断点
目录 常见的断点 1.INT 3 断点 检测 绕过 2.硬件断点 原理 我们给出硬件中断的例子 删除硬件断点 3.内存断点 原理 例子 删除 区别 总结 4.内存访问一次性断点 5.消息断点 例子 删除 6.条件断点 (1)按寄存器条件中断 (2&…...
【JavaScript】拾遗(5.25)
文章目录 1. JavaScript2.HTML嵌入JS的第一种方式:行间事件3.HTML嵌入JS的第二种方式:脚本块的方式4. HTML嵌入JS的第三种方式:外部式(外链式)5. 局部变量和全局变量6. 函数7.事件8.回调函数8.1 注册事件8.2 代码的执行顺序 1. JavaScript JavaScript是一门脚本语言。…...
QMI8658 - 姿态传感器学习笔记 - Ⅲ
文章目录 1.复位1.1 上电复位:1.2 推荐工作条件 2. 校准(COD)2.1 校准步骤2.2 校准注意事项:2.3 校准状态指示2.4 校准参数更新 3. 自检3.1 加速度计自检3.2 陀螺仪自检 4. Ctrl94.1 写Ctrl94.2 读Ctrl94.3 Ctrl9详细命令说明 5. 中断5.1 同步采样模式5.…...
PHP+vue二手车交易信息网站系统
原来二手车网站由于二手车网站制度的不完善,许多城市的二手车网站市场都很少,而且欺诈行文较严重,肆意提高价格,隐瞒汽车所存在的故障问题,人们买卖二手车还是经过朋友帮忙介绍的途径来实现。这就导致了很多人的想卖车…...
NTM中attr的用法
代码1 attrs class CopyTaskParams(object):name attrib(default"copy-task")controller_size attrib(default100, convertint)controller_layers attrib(default1,convertint)num_heads attrib(default1, convertint)sequence_width attrib(default8, convert…...
【python资料】pandas的条件查询
一、说明 在使用Pandas的DataFrame进行数据挖掘的时候,需要形形色色的条件查询,但是这些查询的基本语法是啥,查询的灵活性如何,本文将对他们进行详细列出,便于以后查阅。 二、Pandas条件查询方法 2.1 简单条件查询 1、…...
中间件(三)- Kafka(二)
Kafka 6. 高效读写&Zookeeper作用6.1 Kafka的高效读写6.2 Kafka中zookeeper的作用 7. 事务7.1 Producer事务7.2 Consumer事务 8. API生产者流程9. 通过python调用kafka9.1 安装插件9.2 生产者(Producer)与消费者(Consumer)9.3…...
DAY01_MySQL基础数据类型navicat使用DDL\DML\DQL语句练习
目录 1 数据库相关概念1.1 数据库1.2 数据库管理系统1.3 常见的数据库管理系统1.4 SQL 2 MySQL2.1 MySQL安装2.1.1 安装步骤 2.2 MySQL配置2.2.1 添加环境变量2.2.2 MySQL登录2.2.3 退出MySQL 2.3 MySQL数据模型2.4 MySQL目录结构2.5 MySQL一些命令2.5.1 修改默认账户密码2.5.2…...
数据安全复合治理框架和模型解读(0)
数据治理,数据安全治理行业在发展,在实践,所以很多东西是实践出来的,哪有什么神仙理论指导,即使有也是一家之说,但为了提高企业投产比,必要的认知是必须的,当前和未来更需要专业和创新。数据安全治理要充分考虑现实数据场景,强化业务安全与数据安全治理,统一来治理,…...
Java程序设计入门教程--逻辑运算符和位运算符
目录 逻辑运算符 位运算符 逻辑运算符 逻辑运算符就是表示逻辑关系的运算符。下表列出了逻辑运算符的基本运算,假设布尔变量A为真,变量B为假。 逻辑运算符表 操作符 描述 例子 && 当且仅当两个操作数都为真,条件才为真。 &…...
接口测试简介以及接口测试用例设计思路
接口测试简介 1.什么是接口 接口就是内部模块对模块,外部系统对其他服务提供的一种可调用或者连接的能力的标准,就好比usb接口,他是系统向外接提供的一种用于物理数据传输的一个接口,当然仅仅是一个接口是不能进行传输的&#x…...
C++ Qt项目实战:构建高效的代码管理器
C Qt项目实战:构建高效的代码管理器 一、项目概述(Introduction)1.1 项目背景(Project Background)1.2 项目目标(Project Goals)1.3 项目应用场景(Project Application Scenarios&am…...
【JavaScript 递归】判断两个对象的键值是否完全一致,支持深层次查询,教你玩转JavaScript脚本语言
博主:東方幻想郷 Or _LJaXi 专栏分类:JavaScript | 脚本语言 JavaScript 递归 - 判断两个对象的键值 🌕 起因🌓 代码流程⭐ 第一步 判断两个对象的长度是否一致⭐ 第二步 循环 obj 进行判断两个对象⭐ 第三步 递归条件判断两个对象…...
卷积、相关、匹配滤波、脉冲压缩以及模糊函数
文章目录 【 1. 卷积 】1.1 连续卷积1.2 离散卷积【 2.相关 】2.1 自相关2.2 互相关【 3.匹配滤波 】3.1 滤波器模型3.2 有色噪声-匹配滤波器3.3 白噪声-匹配滤波器3.3.1 原始-白噪声-匹配滤波器3.3.2 简化-白噪声-匹配滤波器3.4 动目标的匹配滤波【 4.脉冲压缩】4.1 时域脉冲压…...
C# 栈(Stack)
目录 一、概述 二、基本的用法 1.入栈 2.出栈 Pop 方法 Peek 方法 3.判断元素是否存在 4.获取 Stack 的长度 5.遍历 Stack 6.清空容器 7.Stack 泛型类 三、结束 一、概述 栈表示对象的简单后进先出 (LIFO) 非泛型集合。 Stack 和 List 一样是一种储存容器&#x…...
网络流量监控及流量异常检测
当今的企业面临着许多挑战,尤其是在监控其网络基础设施方面,需要确保随着网络规模和复杂性的增长,能够全面了解网络的运行状况和安全性。为了消除对网络性能的任何压力,组织应该采取的一项重要行动是使用随组织一起扩展的工具监控…...
六.热修复
文章目录 前言什么是热修复?如何进行热修复?热修复需要解决的问题 1.Android常用的热修复解决方案2.ClassLoader类加载机制2.1 Android类加载器2.2 双亲委托机制2.3 类查找流程 3.插桩式热修复运行期修复落地3.1 什么是字节码插桩?3.2 ASM3.3…...
2000万的行数在2023年仍然是 MySQL 表的有效软限制吗?
谣言 互联网上有传言说我们应该避免在单个 MySQL 表中有超过 2000 万行。否则,表的性能会下降,当它超过软限制时,你会发现 SQL 查询比平时慢得多。这些判断是在多年前使用HDD硬盘存储时做出的。我想知道在2023年对于基于SSD的MySQL数据库来说…...
GPU集群网络优化实战:万兆以太网 vs InfiniBand,哪种更适合你的AI训练任务?
GPU集群网络优化实战:万兆以太网 vs InfiniBand,哪种更适合你的AI训练任务? 在构建高性能GPU集群时,网络架构的选择往往成为决定整体性能的关键因素。想象一下,当你的AI模型需要处理海量参数更新时,网络带宽…...
终极指南:掌握Mi-Create表盘设计工具的5个核心技巧
终极指南:掌握Mi-Create表盘设计工具的5个核心技巧 【免费下载链接】Mi-Create Unofficial watchface creator for Xiaomi wearables ~2021 and above 项目地址: https://gitcode.com/gh_mirrors/mi/Mi-Create 小米手表用户们,你是否厌倦了官方表…...
革新性STL文件管理工具:让3D模型预览效率提升80%的Windows解决方案
革新性STL文件管理工具:让3D模型预览效率提升80%的Windows解决方案 【免费下载链接】STL-thumbnail Shellextension for Windows File Explorer to show STL thumbnails 项目地址: https://gitcode.com/gh_mirrors/st/STL-thumbnail 问题发现:3D设…...
VisualCppRedist AIO:解决Windows运行库管理难题的一站式方案
VisualCppRedist AIO:解决Windows运行库管理难题的一站式方案 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 一、直面运行库困境:三大场…...
c语言基础实战:通过快马ai生成银行账户管理系统练手项目
今天想和大家分享一个用C语言实现的银行账户管理系统小项目。这个项目非常适合用来巩固C语言的基础知识,特别是结构体、指针和文件操作这些核心概念。我自己在学习过程中发现,通过实际项目练习,能更好地理解这些抽象的概念。 项目需求分析 …...
测试右移的复仇:上线后bug如何让公司赔光融资
当质量防线在“最后一公里”失守在软件交付的终点线前,测试团队常被一种“虚假的安全感”所笼罩。测试环境用例全绿,性能压测数据达标,验收报告签字盖章,一切似乎都指向一个平稳的上线。然而,当代码被部署到生产环境&a…...
21.【RTL_Synthesis】Analyzing Synthesis Results(综合结果分析)
🔍 分析综合结果:从数字到洞察 我们已经学会了用 Yosys 把 RTL 综合成门级网表,也知道了如何用脚本批量处理不同工艺角。但综合工具跑完之后,我们得到了一堆数字:多少门、多少触发器、面积多大……这些数字到底意味着什…...
Python包管理工具之uv的使用详细指南
uv 是一个新兴的 Python 包管理工具,它旨在提供比 pip 和 poetry 更快、更现代的依赖管理体验。uv 由 Charles Murphy 开发,基于 Rust 构建,具有极高的性能和兼容性,支持标准的 requirements.txt 文件以及 pyproject.toml 中的依赖…...
BetterNCM Installer:5分钟极速安装网易云音乐插件的终极指南
BetterNCM Installer:5分钟极速安装网易云音乐插件的终极指南 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐插件安装的繁琐步骤而头疼吗?Bet…...
Wan2.2-I2V-A14B数据预处理流水线:使用OpenCV自动化处理输入图像
Wan2.2-I2V-A14B数据预处理流水线:使用OpenCV自动化处理输入图像 1. 为什么需要图像预处理 在图像生成视频(I2V)的流程中,输入图像的质量直接影响最终视频的生成效果。就像做菜前需要洗净切好食材一样,对原始图像进行…...
