一文教你使用Swagger---适合新手小白(结合实战)
1.什么是Swagger
Swagger----在线自动生成接口文档,是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务,可用于接口的文档在线自动生成以及功能测试。
2.Swagger与OpenAPI
OpenAPI规范OpenAPI Specification以前叫做Swagger规范,是REST API的API描述格式。Open API 文件允许描述整个API,包括:
- 每个访问地址的类型,POST或GET
- 每个操作的参数,包括输入输出参数
- 认证方法
- 连接信息、声明,使用团队和其他信息
OpenAPI规范可以使用YAML或jSON格式进行编写,这样更利于阅读。Swagger是一套围绕Open API规范构建的开源工具,可以帮助设计、构建,记录和使用REST API。
3.Swagger工具包括的组件
Swagger Editor:基于浏览器编辑器,可以在里面编写Open API规范。类似Markdown具有实时预览描述文件的功能。
Swagger UI:将Open API规范呈现为交互式API文档。用可视化UI展示描述文件。
Swagger Codegen:将OpenAPI规范生成为服务器存根和客户端库,通过Swagger Codegen可以将描述文件生成html格式和cwiki形式的接口文档,同时也可以生成多种语言的客户端和服务端代码。
Swagger Inspector:和Swagger UI欧典类似,但是可以返回更多信息,也会保存请求的实际参数数据。
Swagger Hub 继承了上面所有项目的各个功能,你可以以项目和版本为单位,将你的描述文件上传到Swagger Hub中。在Swagger Hub中可以完成上面项目的所有工作。需要注册帐号,分免费版和收费版。使用Swagger,就是把相关的信息存储在他定义的描述文件里面(yml或json格式),再通过维护这个描述文件可以去更新接口文档,以及生成各端代码。
4.Springfox的使用
1.引入依赖
<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>
2.启动类上加注解

3.启动后浏览器输入对应端口号+/swagger-ui.html.
我的是 http://localhost:8080/swagger-ui.html#
4.效果如下

5.SwaggerUI的使用和配置
访问swagger-ui.html可以在页面中看到所有需要生成接口文档的控制器名称。
每个控制包含该控制器下所有的方法及访问方式。如果使用的是@RequestMapping进行映射,将在显示所有的请求方式,如上图所示。假设使用@PostMapping,那么就只会显示Post的那个。
点击某个请求方法中的try it out

输入对应的参数,然后点击execute执行,将会出现Request URL以及相应结果。

5.Swagger配置类的实现

效果:
6.自定义注解排除扫描
1.创建NoIncludeSwagger接口
package cn.itcast;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface NoIncludeSwagger {
}
2.配置到Swagger配置类中

3.在需要排除了类上加上注解即可

效果如下:

7.设置范围
所谓设置范围实际就是可以设置满足什么样规则的url能被生成在接口文档中,可以使用正则表达式进行匹配。
下面例子中表示只有以/demo/开头的url才能被swagger生成接口文档。

如果希望所有接口都使用Swagger:
paths(PathSelectors.any())
8.常用注解
1. Api
| 注解名称 | 参数 | 含义 |
|---|---|---|
| @Api | 类上注解,控制整个类生成接口信息的内容 | |
| tags | 类的名称,可以有多个值,多个值表示多个副本 | |
| description | 概述 |
类上注解 控制整个类生成接口信息的内容
package cn.itcast.controller;import cn.itcast.NoIncludeSwagger;
import cn.itcast.domain.People;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/people")
@Api(tags = {"myDemo"},description = "描述")
public class DemoController {
// @NoIncludeSwagger@PostMapping("/getPeople")public People getPeople(Long id, String name){People peo = new People();peo.setId(id);peo.setName(name);peo.setAddress("北京");return peo;}
}

2. ApiOperation
| 注解名称 | 参数 | 含义 |
|---|---|---|
| @ApiOperation | 写在方法上,对方法进行总体描述 | |
| value | 接口描述 | |
| notes | 提示信息 |
@RestController
@RequestMapping("/people")
@Api(tags = {"myDemo"},description = "描述")
public class DemoController {
// @NoIncludeSwagger@ApiOperation(value = "获取人员信息",notes = "通过人员编号和名称获取人员信息")@PostMapping("/getPeople")public People getPeople(Long id, String name){People peo = new People();peo.setId(id);peo.setName(name);peo.setAddress("北京");return peo;}
}

3. ApiParam
| 注解名称 | 参数 | 含义 |
|---|---|---|
| @ApiParam | 写在方法参数前面。用于对参数进行描述或说明是否为必填项等 | |
| name | 参数名称 | |
| value | 参数描述 | |
| required | 是否是必须 |

4. ApiModel
| 注解名称 | 参数 | 含义 |
|---|---|---|
| @ApiParam | 是类上注解,主要应用Model,也就是说这个注解一般都是写在实体类上 | |
| value | 名称 | |
| description | 描述 |

5. ApiModelProperty
| 注解名称 | 参数 | 含义 |
|---|---|---|
| @ApiModelProperty | 一般用于方法,属性的说明 | |
| value | 字段说明 | |
| name | 重写属性名 | |
| required | 是否必须 | |
| example | 示例内容 | |
| hiden | 是否隐藏 |

6. ApiIgnore
| 注解名称 | 含义 |
|---|---|
| @ApiIgnore | 用于方法或类或参数上,表示这个方法或类被忽略,和之前讲解的自定义注解@NotIncludeSwagger效果类似。只是这个注解是Swagger内置的注解,而@NotIncludeSwagger是我们自定义的注解 |
7. ApiImplicitParam
| 注解名称 | 参数 | 含义 |
|---|---|---|
| @ApiImpliciParam | 用在方法上,表示单独的请求参数,总体功能和@ApiParam类似。 | |
| value | 对接口中的参数进行简单必要的描述 | |
| name | 描述接口中参数的名称 | |
| required | 是否必须 | |
| paramType | 接口中的参数应该用在那个地方,常用的位置有:header,query,path | |
| dataType | 接口中参数的类型 |
由于后两个效果类似与前面就不再做演示
相关文章:
一文教你使用Swagger---适合新手小白(结合实战)
1.什么是Swagger Swagger----在线自动生成接口文档,是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务,可用于接口的文档在线自动生成以及功能测试。 2.Swagger与OpenAPI OpenAPI规范OpenAPI Specification以前叫…...
VC++调试QT源码
环境:vs2017 qt 5.14.2 1:首先我们需要选择我们的源码路径 右键解决方案-》属性-》通用属性-》调试源文件-》在窗口内添加QT下载时的源码**.src文件夹**,这里最好把源码 D:\software\QT\path\5.14.2\Src 源文件里面的Src文件做一个备份出来…...
058-第三代软件开发-文件Model
第三代软件开发-文件Model 文章目录 第三代软件开发-文件Model项目介绍文件Model 关键字: Qt、 Qml、 关键字3、 关键字4、 关键字5 项目介绍 欢迎来到我们的 QML & C 项目!这个项目结合了 QML(Qt Meta-Object Language)…...
【领域驱动设计 学习目标及大纲】从CRUD到架构设计
从2018年至今,已工作了5年有余,回望这5年的工作历程,虽然一直在学习、一直在积累,但其实都在术的层面上停留,也就是具体的技术点。这5年多的时间里其实也不是没有窥道的想法: 一次是2018年刚工作的时候&am…...
asla四大开源组件应用示例(alsa-lib、alsa-utils、alsa-tools、alsa-plugins)
文章目录 alsa设备文件/dev/snd//sys/class/sound/proc/asoundalsa-lib示例1alsa-utilsalsa-toolsalsa-plugins参考alsa设备文件 /dev/snd/ alsa设备文件目录位于,/dev/snd,如下所示 root@xboard:~#ls /dev/snd -l total 0 drwxr-xr-x 2 root root 60 Nov 6 2023 …...
文档理解的新时代:LayOutLM模型的全方位解读
一、引言 在现代文档处理和信息提取领域,机器学习模型的作用日益凸显。特别是在自然语言处理(NLP)技术快速发展的背景下,如何让机器更加精准地理解和处理复杂文档成为了一个挑战。文档不仅包含文本信息,还包括布局、图…...
【二叉树】Leetcode 637. 二叉树的层平均值
637.二叉树的层平均值 解题思路 根据层序遍历的模板进行修改;主要的不同是,不需要输出每一层所有节点值,只需要输出平均值,只需要定义一个double双精度浮点数储存每一层数的总和,输出时将总和除以层节点总数即为层平均…...
设计模式-15-Jdk源码中的设计模式
之前我们学习了一些设计模式,今天我们剖析Java JDK 源码中用到的几种常见的设计模式。 1-jdk之工厂模式 在前面讲到工厂模式的时候,大部分工厂类都是以Factory作为后缀来命名,并且工厂类主要负责创建对象这样一件事情。但在实际的项目开发中…...
Vue框架学习笔记——事件scroll和wheel的区别
文章目录 前文提要滚动条滚动事件 scroll鼠标滚动事件 wheel二者不同点 前文提要 本人仅做个人学习记录,如有错误,请多包涵 滚动条滚动事件 scroll scroll事件绑定html页面中的指定滚动条,无论你拖拽滚动条,选中滚动条之后按键盘…...
【LeetCode】每日一题 2023_11_29 无限集中的最小数字(哈希/堆)
文章目录 刷题前唠嗑题目:无限集中的最小数字题目描述代码与解题思路偷看大佬题解 结语 刷题前唠嗑 LeetCode?启动!!! 今天的题目也比较的简单,因为数据量不大,所以什么做法都能过的去 题目&a…...
C/C++ 常用的四种查找算法
在计算机科学中,搜索算法是一种用于在数据集合中查找特定元素的算法。C语言作为一种强大的编程语言,提供了多种搜索算法的实现方式。本文将介绍C语言中的四种常见搜索算法其中包括(线性查找,二分法查找,树结构查找&…...
Linux | Ubuntu设置 netstat(网络状态)
netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。 1.netstat的安装 搜…...
成为AI产品经理——模型构建流程(下)
目录 1.模型训练 2.模型验证 3.模型融合 4.模型部署 上节课我们讲了模型设计、特征工程,这节课我们来讲模型构建剩下的三个部分:模型训练、模型验证和模型融合。 1.模型训练 模型训练就是要不断地训练、验证、调优直至让模型达到最优。 那么怎么达…...
TCP Socket API 讲解,以及回显服务器客户端的实现
文章目录 TCPServerSocket APISocket API TCP 客户端服务器的实现 TCP ServerSocket API ServerSocket 是创建TCP服务端 Socket 的 API。 serverSocket构造方法: 方法签名方法说明ServerSocket(int port)创建一个服务端流套接字Socket,并绑定到指定端…...
2023年掌控安全学院CTF暖冬杯——数据流分析
前言:打工仔一枚,第一波上新的3题misc 做完了 再打ISCTF随便记录一下 PS:环境关了,题目描述忘记了,反正就是找flag。 筛选HTTP数据流 导出数据流慢慢看 ctrl F 搜flag 看到一条 有flag.txt 的数据 导出另存.zip 这里…...
UE4 基础篇十四:自定义插件
文末有视频地址和git地址 一、概念 虚幻里插件都是用C++写的,C++包括.h文件和.cpp文件,.h头文件通常包含函数类型和函数声明,cpp文件包含这些类型和函数的实现, 你为项目编写的所有代码文件都必须位于模块中,模块就是硬盘里的一个文件夹,包含名为“Build.cs”的C#文件…...
QT QGraphicsItem 图元覆盖导致鼠标点击事件不能传递到被覆盖图元
一、概述 在日常开发中,遇到这样一个问题,线图元和引脚图元重叠,导致点击引脚图元,没有进入引脚图元的鼠标点击事件中。 二、产生原因 如果您的 QGraphicsItem 上有一个图元覆盖了它,可能会导致鼠标事件无法正常触发…...
proto语法学习笔记
proto语法学习笔记 Protocol Buffers(Proto是由谷歌开发的一种数据序列化格式。 Proto 不是一种编程语言,而是一种接口描述语言(IDL),用于定义数据结构和消息格式。 它的设计目标是提供一种简单、高效、可扩展的方法来…...
python-nmap库使用教程(Nmap网络扫描器的Python接口)(功能:主机发现、端口扫描、操作系统识别等)
文章目录 Python-nmap库使用教程前置条件引入python-nmap创建Nmap扫描实例执行简单的主机发现(nmap -sn)示例,我有一台主机配置为不响应 ICMP 请求,但使用nmap -sn,仍然能够探测到设备: 端口扫描扫描特定端…...
什么是智慧工地?
一、什么是智慧工地? 工地本身不拥有智慧,工地的运作是依赖于人的智慧。工地信息化技术,能够减少对人的依赖,使工地拥有智慧。 智慧工地,就是立足于“智慧城市”和“互联网”,采用云计算、大数据和物联网等…...
Qwen3-TTS声音克隆实战:3秒复制你的声音,Unity游戏角色秒变话痨
Qwen3-TTS声音克隆实战:3秒复制你的声音,Unity游戏角色秒变话痨 1. 引言:当游戏角色学会"说话" 想象一下这样的场景:你正在开发的RPG游戏中,玩家可以上传自己的声音样本,然后所有NPC都会用玩家…...
基于SiameseUniNLU的文本匹配与NLI实战:开源中文推理模型部署案例
基于SiameseUniNLU的文本匹配与NLI实战:开源中文推理模型部署案例 1. 项目介绍与核心价值 SiameseUniNLU是一个创新的中文自然语言理解模型,它采用统一的架构来处理多种NLP任务。这个模型最大的特点是用一套代码就能完成文本匹配、自然语言推理、实体识…...
REX-UniNLU在SpringBoot项目中的集成指南
REX-UniNLU在SpringBoot项目中的集成指南 1. 引言 如果你正在开发一个需要理解中文文本的SpringBoot应用,比如要做智能客服、内容分析或者自动分类,那么REX-UniNLU可能会是个不错的选择。这是一个专门为中文设计的自然语言理解模型,不需要训…...
Phi-4-mini-reasoning部署教程:SSL证书配置实现https安全访问Web界面
Phi-4-mini-reasoning部署教程:SSL证书配置实现https安全访问Web界面 1. 环境准备 在开始配置SSL证书前,请确保您已经完成以下准备工作: 已部署Phi-4-mini-reasoning模型并正常运行拥有服务器管理员权限已获取有效的域名(可以是…...
YOLOv8n-face人脸检测架构:6MB模型实现92%精度与25ms延迟的企业级方案
YOLOv8n-face人脸检测架构:6MB模型实现92%精度与25ms延迟的企业级方案 【免费下载链接】yolov8-face yolov8 face detection with landmark 项目地址: https://gitcode.com/gh_mirrors/yo/yolov8-face YOLOv8n-face是基于YOLOv8架构优化的轻量级人脸检测模型…...
别再只看FLOPs了!从VoVNet的OSA模块看高效网络设计的实战误区
从VoVNet的OSA模块看高效网络设计的实战误区:为什么你的模型跑得比论文慢? 当我们在GitHub上复现一篇顶会论文时,最沮丧的瞬间莫过于:明明FLOPs和参数量完全匹配,实际推理速度却比论文报告值慢了30%。这个问题在部署De…...
Harness Engineering 核心概念详解
文章目录1. Harness Engineering 的本质定义1.1 核心定义1.2 诞生的历史时刻1.3 "Harness" 的本意2. Agent Model Harness 核心公式2.1 公式解读2.2 LangChain 工程师的精炼定义2.3 类比:CPU 与操作系统3. Harness 三大支柱详解3.1 支柱一:上…...
红外遥控技术原理与工程实践
1. 红外遥控技术基础解析 红外遥控技术自20世纪80年代开始普及,如今已成为家电控制领域最成熟可靠的解决方案之一。作为一名电子工程师,我在多个智能家居项目中都深度应用过红外控制模块。红外技术的核心优势在于其简单可靠的物理层实现和标准化的通信协…...
SecGPT-14B批量处理:用OpenClaw自动化1000个网站安全检测
SecGPT-14B批量处理:用OpenClaw自动化1000个网站安全检测 1. 为什么需要自动化安全检测 作为一名长期关注网络安全的技术从业者,我经常需要对大量网站进行安全检测。传统的手动检测方式不仅效率低下,而且容易遗漏关键漏洞。最近在测试SecGP…...
Cursor根本无法调试C++
你知道吗?你的Cursor可能正在"假装"是VS Code,但它根本无法像VS Code一样正常调试C。项目里按下F5,弹出提示:“Windows C Debugging is supported only in Microsoft versions of VS Code。” 检查配置无误,…...
