swagger常用注解
最近查看接口文档的时候发现,POST方法中的query没法在swagger中显示,查了才发现这是因为Swagger或OpenAPI规范默认将HTTP POST请求的参数识别为请求体(body)参数,而不是查询字符串(query)参数。这意味着,如果你的POST请求中使用了查询字符串参数并希望在Swagger文档中正确展示它们,你需要明确地通过Swagger注解来指定这些参数是查询参数。因此还是有必要规范swagger注解的。
详细用法
@Api:用在Controller控制器类上value:指定 API 的名称。tags:指定 API 的标签,用于对 API 进行分类。description:描述 API 的功能和作用。produces:指定 API 的响应内容类型。consumes:指定 API 接受的请求内容类型。authorizations:指定 API 的安全认证要求。hidden:指定是否隐藏该 API@ApiOperation:用在Controller控制器类的请求的方法上value:对该操作进行简单的描述,尽量控制在120字符以内notes:对操作的详细描述httpMethod:指定操作使用的HTTP方法类型,可选值 “GET”、“HEAD”、“POST”、“PUT”、“DELETE”、“OPTIONS”和“PATCH”tags:用来给操作打标签,Swagger UI 将在操作列表下面展示 tag 列表,每个 tag 下面展示拥有该 tag 的操作列表。(就是分组)@ApiImplicitParams:用在请求的方法上,表示一组参数说明@ApiImplicitParam:请求方法中参数的说明name:参数名value:参数的汉字说明、解释、用途required:参数是否必须传,布尔类型paramType:参数的类型,即参数存储位置或提交方式· header --> Http的Header携带的参数的获取:@RequestHeader· query --> 请求参数的获取:@RequestParam · path(用于restful接口)--> 请求参数的获取:@PathVariable· body(不常用)· form(不常用) dataType:参数类型,默认String,其它值dataType="Integer" defaultValue:参数的默认值@ApiResponses:用在控制器的请求的方法上,对方法的响应结果进行描述@ApiResponse:用于表达一个响应信息code:数字,例如400message:信息,例如"请求参数没填好"response:响应结果封装类,如上例子中的AjaxResponse.class@ApiModel:通常用在描述@RequestBody和@ResponseBody注解修饰的接收参数或响应参数实体类value:属性值,也就是该实体类的描述值,不写默认为实体类的名称,通常描述不清晰才需要value值description:描述值,与value不同,该description为较长描述值parent:用于指定被注解类的父类discriminator:多态情境区分多个子类subTypes:指定被注解类的子类reference:提供对被注解类的引用信息@ApiModelProperty:实体类属性的描述value:注解的默认属性,理解为注释的作用name:指定属性或方法的名称,重写该属性名字allowableValues:指定属性或方法的可接受值范围。access:指定属性或方法的访问规则。notes:提供对属性或方法的额外说明。dataType:指定属性或方法的数据类型。required:指定属性或方法是否为必需。position:指定属性或方法在文档中的位置。hidden:指定属性或方法是否应该在文档中隐藏。example:提供属性或方法的示例值。readOnly(已过时):指定属性或方法是否为只读。已过时,推荐使用 access 属性。accessMode:指定访问模式,可以是 AUTO、READ_ONLY 或 READ_WRITE。reference:提供属性或方法的引用信息。allowEmptyValue:指定属性或方法是否允许为空值。extensions:指定属性或方法的扩展信息,支持一组扩展属性。AccessMode枚举:属性或方法的访问模式,包括 AUTO、READ_ONLY 和 READ_WRITE。
一个实例
Controller 示例
假设我们有一个处理图书信息的API。
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;@RestController
@Api(value = "Books Controller", tags = {"Books"})
@Slf4j
@RequestMapping("/book")
public class BooksController {@ApiOperation(value = "Get book by ID", notes = "Provides a book's details by its ID")@ApiImplicitParams({@ApiImplicitParam(name = "id", value = "Book ID", required = true, dataType = "long", paramType = "query")})@GetMapping("/books")public BookResponse getBookById(Long id) {// 模拟查询书籍逻辑return new BookResponse(1L, "示例书名", "示例作者", "这是一个示例描述。");}@ApiOperation(value = "Create a new book", notes = "Creates a new book with the provided information")@PostMapping("/books")public BookResponse createBook(@RequestBody BookRequest bookRequest) {// 模拟书籍创建逻辑return new BookResponse(bookRequest.getId(), bookRequest.getTitle(), bookRequest.getAuthor(), bookRequest.getDescription());}
}
Request 示例
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;@Data
@ApiModel(description = "Book creation request")
public class BookRequest {@ApiModelProperty(value = "The ID of the book", required = true)private Long id;@ApiModelProperty(value = "The title of the book", required = true)private String title;@ApiModelProperty(value = "The author of the book")private String author;@ApiModelProperty(value = "The description of the book")private String description;// 构造函数、Getter和Setter方法省略
}
Response 示例
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;@Data
@ApiModel(description = "Book response containing book details")
public class BookResponse {@ApiModelProperty(value = "The ID of the book")private Long id;@ApiModelProperty(value = "The title of the book")private String title;@ApiModelProperty(value = "The author of the book")private String author;@ApiModelProperty(value = "The description of the book")private String description;public BookResponse(Long id, String title, String author, String description) {this.id = id;this.title = title;this.author = author;this.description = description;}// Getter和Setter方法省略
}
在这个例子中,BooksController类包括了两个API端点:一个用于通过ID获取书籍详细信息的GET请求,另一个用于创建新书籍的POST请求。BookRequest和BookResponse类分别用于API请求和响应的数据模型,它们通过使用@ApiModel和@ApiModelProperty注解来提供字段的描述以增强自动生成的Swagger(OpenAPI)文档的可读性。
相关文章:
swagger常用注解
最近查看接口文档的时候发现,POST方法中的query没法在swagger中显示,查了才发现这是因为Swagger或OpenAPI规范默认将HTTP POST请求的参数识别为请求体(body)参数,而不是查询字符串(query)参数。…...
【Flink metric(1)】Flink指标系统的系统性知识:获取metric以及注册自己的metric
文章目录 一. Registering metrics:向flink注册新自己的metrics1. 注册metrics2. Metric types:指标类型2.1. Counter2.2. Gauge2.3. Histogram(ing)2.4. Meter 二. Scope:指标作用域1. User Scope2. System Scope ing3. User Variables 三. Reporter ing四. System…...
命令模式(Command Pattern)
命令模式(Command Pattern) 定义 命令模式是对命令的封装,每一个命令都是一个操作:请求的一方发出请求要求执行一个操作;接收的一方收到请求,并执行操作。 命令模式解耦了请求方和接收方,请求…...
掌握Symfony的模板继承:构建强大且灵活的Web界面
掌握Symfony的模板继承:构建强大且灵活的Web界面 在Symfony框架中,模板继承是一个强大的功能,它允许开发者创建可重用的布局模板,并通过扩展这些模板来构建具体的页面。这种机制不仅提高了代码的可维护性,还使得页面结…...
uboot基本使用网络命令和从服务器端下载linux内核启动
网络命令ip地址设置: setenv gmac_debug 0; setenv mdio_intf rgmii; setenv bootdelay 1; setenv ethaddr 00:xxxx:81:70; // mac地址 setenv ipaddr xxx; //开发板 IP 地址 setenv netmask 255.255.255.0; setenv gatewayip xxx.1; setenv serverip xxxx; //服…...
解决ArcGIS导出的svg格式的图片插入Word后的字体问题
背景 在ArcGIS中设置字体为Times New Roman,但导入Word后字体转为等线。 ArcGIS中的Layout 导入Word 原因分析 Word无法识别嵌入进SVG格式文件中的字体。 解决方案 在Export Layer窗口中,将Embed fonts取消勾选,Convert cha…...
如何确保 Puppet 配置在复杂网络环境中的可靠分发和同步?
在复杂网络环境中确保 Puppet 配置的可靠分发和同步可以采取以下措施: 网络拓扑规划:在复杂网络环境中,首先需要进行网络拓扑规划,确保网络结构合理,并能够支持可靠的分发和同步机制。 Puppet Master 多节点部署&…...
2024最新!将mysql的数据导入到Solr
Solr导入mysql的数据 如何安装导入数据前准备配置Solr的Jar包以及Mysql驱动包1.1、将solr-8.11.3\dist下的两个包进行移动1.2、将mysql-connect包也移动到该位置1.3、重启Solr项目 配置xml2.1、第一步我们需要创建核心2.2、第二步修改xml(这里是结合19年的教程)2.3、 创建data-…...
Python数据分析第二课:conda的基础命令
Python数据分析第二课:conda的基础命令 1.conda是什么? conda是一个开源的包管理系统,可以帮助我们进行管理多个不同版本的软件包,还可以帮助我们建立虚拟环境,以便对不同的项目进行隔离。 简单来说,conda是一个软…...
LayoutInflater加载流程
简介 LayoutInflater在日常的Android开发中是经常使用的类,常常用于XML中View的加载相关流程。本文主要总结一些其常见api的源码流程。 获取LayoutInflater 我们一般会在Activity的onCreate方法中会通过setContentView方法设置自己的布局layoutId,Act…...
PLC数据采集案例
--------天津三石峰科技案例分享 项目介绍 项目背景 本项目为天津某钢铁集团下数字化改造项目,主要解决天津大型钢厂加氢站数字化改造过程中遇到的数据采集需求。项目难点PLC已经在运行了,需要采集里面数据,不修改程序,不影响P…...
基于单片机和LabVIEW 的远程矿井水位监控系统设计
摘要 : 针 对 现 有 矿 井 水 位 监 控 系 统 存 在 结 构 复 杂 和 不 能 远 程 监 控 的 问 题 , 设计了基于单片机和LabVIEW 的远程矿井水位监控系统 , 详…...
element 表格嵌套表单验证指定行
elementui表格嵌套动态表单,单独验证某一行输入项是否符合校验规则; input动态绑定校验 :prop"imgTable. scope.$index .bxName" <el-form :model"formTable" ref"formTable" inline size"small"><…...
CORE Mobility Errorr的调试
在运行CORE tutorial 3中的mobility示例时,出现如下错误: 当看到这个问题的时候,并没有仔细去分析日志和现象,在core-daemon的进程打印界面只看了一下最后的出错堆栈: 2024-06-27 10:43:48,614 - ERROR - _server:_ca…...
基于weixin小程序乡村旅游系统的设计
管理员账户功能包括:系统首页,个人中心,用户管理,商家管理,旅游景点管理,景点类型管理,景点路线管理,系统管理 商家帐号账号功能包括:系统首页,旅游景点管理&…...
详解三种常用标准化 Batch Norm Layer Norm RMSNorm
参考: BN究竟起了什么作用?一个闭门造车的分析《动手学深度学习》7.5 节 深度学习中,归一化是常用的稳定训练的手段,CV 中常用 Batch Norm; Transformer 类模型中常用 layer norm,而 RMSNorm 是近期很流行…...
云计算运维工程师面试
1. 云计算运维工程师的角色和职责是什么? 回答: 云计算运维工程师负责确保云计算环境(包括硬件和软件系统)的高可用性和稳定性。他们的主要职责包括: 监测系统和应用程序的性能,确保它们正常运行。故障排除,快速响应并解决系统或应用程序中出现的问题。容量规划,根据…...
聚观早报 | iPhone 16核心硬件曝光;三星Galaxy全球新品发布会
聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 6月28日消息 iPhone 16核心硬件曝光 三星Galaxy全球新品发布会 苹果正多方下注布局AI商店 黄仁勋2024年薪酬3400…...
web前端之文档流、浮动、定位详解
目录 一、文档流 二、浮动 1.添加浮动 2.清除浮动 三、定位 1.相对定位 2.绝对定位 一、文档流 什么是文档流? ● 文档流指的是文档中的标签在排列时所占用的位置。 将窗体自上而下分成一行行 ,并在每 行中按从左至右的顺序排放标签,…...
[JS]节点操作
DOM节点 DOM树中的所有内容都是节点, 我们重点关注元素节点 作用 使开发者可以根据节点的关系获取元素, 而不是只能依赖选择器, 提高了编码的灵活性 节点分类 元素节点: 所有的标签都是元素节点, html是根节点属性节点: 所有的属性都是属性节点, 比如href文本节点: 所有的文…...
0403开源:第四卷光刻机整机控制与量检测系统(A级 中期集中攻坚)3. 开源纳米级计量检测设备卡点
开源光刻机整机控制与量检测系统(A级 中期集中攻坚) 3. 开源纳米级计量检测设备卡点(全参数开源硬核壁垒拆解喂饭级溯源破局) 前置开源声明 本节全程无保留开源光刻量检测底层原理、设备架构、纳米级计量阈值、国内外参数对标、核…...
终极分子绘图工具Ketcher:免费在线化学结构编辑器完整指南
终极分子绘图工具Ketcher:免费在线化学结构编辑器完整指南 【免费下载链接】ketcher Web-based molecule sketcher 项目地址: https://gitcode.com/gh_mirrors/ke/ketcher 还在为复杂的化学结构绘图而烦恼吗?传统绘图工具操作繁琐、格式兼容性差、…...
PHPExcel批量数据导入终极指南:验证、清洗与入库全流程 [特殊字符]
PHPExcel批量数据导入终极指南:验证、清洗与入库全流程 🚀 【免费下载链接】PHPExcel ARCHIVED 项目地址: https://gitcode.com/gh_mirrors/ph/PHPExcel PHPExcel是一款强大的PHP库,专门用于处理Excel文件的读取、写入和操作。虽然该项…...
普冉PY32F0系列开发:如何用VSCode+Cortex-Debug插件实现媲美Keil的图形化调试体验?
普冉PY32F0开发实战:VSCodeCortex-Debug打造专业级嵌入式调试环境 在嵌入式开发领域,高效的调试工具往往能决定项目的成败。对于使用普冉PY32F0系列Cortex-M0 MCU的开发者而言,传统商业IDE虽然功能完善,但存在许可成本高、跨平台支…...
【Verilog实战】从零掌握:语法规范与高效编码风格
1. Verilog语法规范入门:从"能跑"到"优雅" 第一次接触Verilog时,很多人会陷入"代码能跑就行"的误区。我刚开始做FPGA开发时,曾经写过一段让同事看了直皱眉头的代码:200行连成一片,变量名…...
【AI面试临阵磨枪-56】大模型服务部署:Docker、K8s、GPU 调度、推理加速
一、 面试题目在生产环境中部署大模型服务时,你是如何结合 Docker 和 K8s 实现高效治理的?特别是在 GPU 调度(如共享、切分) 和 推理加速(如 vLLM, TensorRT-LLM) 方面有哪些实战经验?二、 知识…...
AKTools深度解析:3分钟构建跨语言金融数据API的实战指南
AKTools深度解析:3分钟构建跨语言金融数据API的实战指南 【免费下载链接】aktools AKTools is an elegant and simple HTTP API library for AKShare, built for AKSharers! 项目地址: https://gitcode.com/gh_mirrors/ak/aktools AKTools是一款为AKShare开源…...
Python性能优化实战:Numba JIT编译器原理与高性能计算应用
1. 项目概述:当Python遇上性能瓶颈,Numba如何成为“救火队长”?在数据科学、科学计算和机器学习领域,Python以其简洁的语法和丰富的生态库(如NumPy、Pandas、SciPy)成为了事实上的标准语言。然而࿰…...
CubeMX默认配置的坑:STM32 LPUART的ORE溢出错误如何彻底解决(从寄存器到HAL库的避坑指南)
STM32 LPUART的ORE溢出错误:从硬件机制到HAL库的深度解决方案 当你在深夜调试STM32的LPUART接口时,突然发现串口"神秘"地停止了响应——这种场景对于经验丰富的嵌入式工程师来说并不陌生。问题的根源往往指向那个容易被忽视的Overrun Error&am…...
保姆级避坑指南:AWR1864毫米波雷达从开箱到跑通第一个Demo(附驱动、固件版本匹配心得)
AWR1864毫米波雷达开发实战:从零到Demo的避坑全攻略 刚拿到AWR1864评估模块(EVM)的开发者,往往会被TI毫米波雷达技术的强大功能所吸引,却在第一步就遭遇各种"水土不服"。驱动安装报错、固件版本混乱、开发板无法识别、Demo连接失败…...
