逐步学习 Swagger enum:从入门到精通

enumSwagger 规范中用来定义枚举类型的一种方式。它允许开发者在 API 文档中明确列出该接口的参数、返回值或请求体中可接受的枚举值。通过使用 Swagger enum,开发者可以更清晰地描述 API 的输入和输出,提高 API 文档的可读性和可维护性。

enum 使用场景

在以下情况下,使用 Swagger enum 功能是非常有意义的:

  1. API 接口 的参数或返回值具有预定义的枚举值时,使用 Swagger enum 可以明确告知使用者可以选择的选项。
  2. 当 API 接口有多个可能的状态时,使用 Swagger enum 可以减少开发者需要查看 API 源代码的次数,从而更快地理解 API 的用法。
  3. 当使用了前后端分离的开发架构时,Swagger enum 可以作为后端开发人员与前端开发人员之间统一枚举值的约定。

enum 用法介绍

在 Swagger 规范中,使用 enum 关键字定义枚举值。例如,我们可以在参数定义中使用 enum 来明确指定参数的可选值:

parameters:
  - name: status
    in: query
    required: true
    type: string
    enum:
      - active
      - inactive

在这个示例中,status 参数的可能取值只能是 activeinactive

实践案例

当使用 Swagger Editor 来编辑和运行 Swagger 定义时,可以使用以下示例在枚举类型中使用 Swagger enum:

swagger: "2.0"
info:
  title: Example API
  version: 1.0.0

paths:
  /pets:
    post:
      summary: Add a new pet to the store
      parameters:
        - name: petSize
          in: query
          description: The size of the pet
          required: true
          type: string
          enum:
            - small
            - medium
            - large
      responses:
        200:
          description: OK

Swagger Editor 中,将以上文本粘贴到编辑器中,你会看到右侧的 Swagger UI 将显示你的 API。你可以尝试发送请求以查看效果。

当你向/pets发送 POST 请求时,你将需要在查询参数中传递petSize的值。尝试将petSize设置为smallmediumlarge之外的其他值,并发送请求。你将会看到 Swagger UI 会标示出你的请求是无效的,并在文档中明确列出可选的枚举值。

这个示例可以在 Swagger Editor 中运行并进行测试,以展示 Swagger enum 的使用方式。

在 SpringBoot 中配置注解

在 Spring Boot 中,你可以使用@ApiModelProperty注解来配置 Swagger 枚举类型。

首先,确保在你的项目中添加了 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>

接下来,在你的枚举字段上使用@ApiModelProperty注解进行配置。例如,假设你有一个名为Pet的实体类,其中包含一个size字段,它使用了枚举类型:

import io.swagger.annotations.ApiModelProperty;

public class Pet {
    @ApiModelProperty(value = "The size of the pet", allowableValues = "SMALL, MEDIUM, LARGE")
    private Size size;

    // ...
}

在上述示例中,我们使用了@ApiModelProperty注解来指定字段的描述和可选值。allowableValues属性用于指定可选的枚举值,每个值用逗号分隔。

然后,使用@ApiModel注解来对实体类进行配置:

import io.swagger.annotations.ApiModel;

@ApiModel(description = "Pet entity")
public class Pet {
    // ...
}

接下来,配置 Swagger 的 Docket Bean 来启用 Swagger 并设置相关配置。在你的 Spring Boot 应用程序主类中,添加以下代码:

import springfox.documentation.swagger2.annotations.EnableSwagger2;

@SpringBootApplication
@EnableSwagger2
public class YourApplication {

    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.any())
            .paths(PathSelectors.any())
            .build();
    }
}

以上代码配置了一个名为api的 Docket Bean 来启用 Swagger,并设置了扫描所有请求处理程序和路径的条件。

然后,启动你的 Spring Boot 应用程序并访问 Swagger UI 界面(通常是http://localhost:8080/swagger-ui.html)。你将看到你的枚举类型字段显示了可选的枚举值。

注意事项

使用 Swagger enum 时需要注意以下几点:

  1. 枚举值应该是唯一且具有描述性的,以方便开发者理解每个选项的含义。
  2. 当枚举值数量较多时,建议将其定义为一个单独的类,以提高可读性。
  3. 在修改枚举值时,需要确保 API 的使用者也同步更新了对应的枚举值。

常见问题和解决方案

  • 枚举值定义错误导致接口调用失败:请确保在枚举定义中使用的值与接口定义一致。
  • 枚举类中的值和实际应用不一致:请确保在修改枚举类时同步更新 API 接口。

Swagger 和 Apifox 整合

你可以在 IDEA 中自动同步 Swagger 注解到 Apifox,一键生成接口文档,多端同步,非常方便测试和维护,这样就可以迅速分享 API 给其他小伙伴。

Apifox 的 IDEA 插件可以自动解析代码注释,并基于 Javadoc、KDoc 和 ScalaDoc 生成 API 文档。通过 IntelliJ IDEA 的 Apifox Helper 插件,开发人员可以在不切换工具的情况下将他们的文档与 Apifox 项目同步。

当在 IDEA 项目中有接口信息变动,只需右键点击「 Upload to Apifox」一键即可完成同步,无需奔走相告。 团队成员可在 Apifox 中看到同步后的最新内容。

知识扩展:

  • Swagger 接口分组配置教程
  • Swagger map 类型参数使用详解

参考链接:

Swagger 官方文档关于 enum 的介绍:Enums

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/132756.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ROS 多级tf坐标转换

题目 现有一移动机器人&#xff0c;该机器人的基坐标系为“base_link”&#xff0c;机器人包含3个子坐标系分别为“joint1”&#xff0c;“joint2”&#xff0c;“joint3”。 要求&#xff1a;利用多坐标转换&#xff0c;实现joint1下的坐标向joint2下的坐标转换&#xff0c;…

YOLOv8-seg改进:复现HIC-YOLOv5,HIC-YOLOv8-seg助力小目标分割

🚀🚀🚀本文改进:HIC-YOLOv8-seg:1)添加一个针对小物体的额外预测头,以提供更高分辨率的特征图2)在backbone和neck之间采用involution block来增加特征图的通道信息;3)在主干网末端加入 CBAM 的注意力机制; 🚀🚀🚀HIC-YOLOv8-seg小目标分割检测&复杂场景…

find和grep命令的简单使用

find和grep命令的简单使用 一、find例子--不同条件查找 二、grep正则表达式的简单说明例子--简单文本查找例子--结合管道进行查找 一、find find 命令在指定的目录下查找对应的文件。 find [path] [expression]● path 是要查找的目录路径&#xff0c;可以是一个目录或文件名…

Vue3-组合式API下的父传子和子传父

组合式API下的父传子 基本思想&#xff1a; 1.父组件中给子组件绑定组件 2.子组件内部通过props选项接收 const propsdefineProps({属性名:类型}) 由于script上写了setup&#xff0c;所以无法直接配置props选项&#xff0c;所以需要借助于“编译器宏”函数接收传递的数据 …

GPT4 Turbo 究竟更新了什么

GPT4 Turbo 究竟更新了什么 记忆力和上下文理解能力增强 现在的GPT4可以理解128K的文本&#xff0c;相当于几百页的内容&#xff0c;你的GPT4再也不会忘记你之前说的什么了&#xff0c;换句话说之前他只能记住一篇文章&#xff0c;而现在可以记住一整本书的内容了 API降价 输入…

基于FANUC工业机器人的坐标系转换、多视角拼接与三维重建

0.简介 总体任务&#xff1a;机械臂末端安装三维相机&#xff0c;绕着工件进行拍摄&#xff0c;并在计算机中将每次拍摄的点云合并在同一个坐标系下&#xff0c;从而获得更加完整全面的点云。机械臂&#xff1a;FANAUC相机&#xff1a;梅卡曼德技术方案&#xff1a;使用相机外…

零代码+分布式微服务架构打造新一代一站式服务集成平台

目 录 01 项目背景 02 普元ESB产品介绍 03 新版本功能特性 04 应用案例‍‍‍‍ 05 展望与发展 01 项目背景 企业在实现数字化转型的过程中&#xff0c;随着信息化程度的提高&#xff0c;越来越多的企业开始采用微服务架构来构建自己的业务系统,各种系统之间的集成、数据共享…

k8s上对Pod的管理部分详解

目录 一.Pod结构介绍 1.user container 2.pause 二.Pod工作形式介绍 1.自主式pod 2.控制器管理下的pod 三.对Pod的操作介绍 1.run/apply -f/create -f运行pod 2.get查看pod信息 3.exec操作运行中的pod &#xff08;1&#xff09;进入运行中的pod &#xff08;2&…

Linux RPM包安装、卸载和升级

我们以安装 apache 程序为例。因为后续章节还会介绍使用源码包的方式安装 apache 程序&#xff0c;读者可以直观地感受到源码包和 RPM 包的区别。 RPM包默认安装路径 通常情况下&#xff0c;RPM 包采用系统默认的安装路径&#xff0c;所有安装文件会按照类别分散安装到表 1 所…

阿里云付费用户破100万 用户规模亚洲最大

导读阿里巴巴集团公布2018财年第一季度财报&#xff0c;阿里云达到一个重要里程碑&#xff0c;云计算付费用户数量首次超过100万&#xff0c;成为亚洲首家达到百万级用户规模的云计算公司。同时&#xff0c;企业级市场被云计算人工智能等新技术全面激活&#xff0c;推动该季度营…

Stable Diffusion:最先进的文本生成图像模型

稳定扩散 生成式 AI 技术正在迅速发展&#xff0c;现在可以简单地根据文本输入生成文本和图像。Stable Diffusion 是一种文本到图像模型&#xff0c;使您能够创建逼真的应用程序。 扩散模型通过学习去除添加到真实图像中的噪声进行训练。这种降噪过程会产生逼真的图像。这些模…

【研究】Splunk 字段是否被加工过

1: 背景: 最近用户有个疑问,就是有些字段的输出有点问题,不确定是否被加工过。 2: 查找问题: index=abc sourcetype=def123 发现字段: city_shanghai 的输出可能有点问题。 3: 排查问题: 先去这个splunk search head cluster 的页面: server 的查找如下: 登入so1 s…

【Linux系统概念】

Linux系统概念 1 用户1.1 su和sudo1.1.1 /etc/sudoers 1.21.3 2345 1 用户 1.1 su和sudo 为什么会有su和sudo命令&#xff1f; 在实际工作当中需要在Linux不同用户之间进行切换。 root用户权限最高很多时候需要root用户才能执行一些关键命令。所以需要临时切换为root用户。工…

【C++】智能指针(一)

这篇文章介绍下C的智能指针&#xff0c;当然&#xff0c;可能没有你想的那么智能。 为什么需要智能指针1 void remodel(string& str) {string* ps new string(str);str *ps;return; }这里不讨论这个函数有没有意义&#xff0c;在这段代码中&#xff0c;很明显&#xff…

数据分析实战 | SVM算法——病例自动诊断分析

目录 一、数据分析及对象 二、目的及分析任务 三、方法及工具 四、数据读入 五、数据理解 六、数据准备 七、模型训练 八、模型应用及评价 一、数据分析及对象 CSV文件——“bc_data.csv” 数据集链接&#xff1a;https://download.csdn.net/download/m0_70452407/88…

Linux操作系统下对c语言程序的编译和执行过程gcc,编译链接过程

目录 1.gcc,g,gdb安装 2.gcc分布编译链接 3.编译链接过程 4.执行 4.1 如何执行 4.2 两步执行与一步执行 4.3 多文件的编译执行 1.gcc,g,gdb安装 命令行写gcc,g,gdb根据提示安装:sudo apt install gcc/g/gdb 2.gcc分布编译链接 (1)预编译: gcc -E main.c -o main.i (2)…

关于el-table+el-input+el-propover的封装

一、先放图片便于理解 需求&#xff1a; 1、el-input触发focus事件&#xff0c;弹出el-table(当然也可以为其添加搜索功能、分页) 2、el-table中的复选共能转化成单选共能 3、选择或取消的数据在el-input中动态显示 4、勾选数据后&#xff0c;因为分页过多&#xff0c;原先选好…

VEINS_CARLA代码详解

VEINS_CARLA代码详解 examples/veins_carlaprotosrc/veins_carla/appveins_carla/src/veins_carla/mobilityveins_carla/src/veins_carla/nodesveins_carla/src/veins_carla/proto 基于GPT-3.5 examples/veins_carla 从examples/veins_carla开始&#xff1a; CarlaExampleS…

P5906 【模板】回滚莫队不删除莫队

这一题&#xff0c;虽说在洛谷标的是模板题&#xff0c;但可能没有“历史研究”那一题更加模板。 这一题相对于回滚莫队的模板题&#xff0c;可能在回滚的处理上稍微复杂了一点。对于回滚莫队就不多解释了&#xff0c;可以看一下 回滚莫队模板题 这一篇博客&#xff0c;稍微简单…

PHP 服装销售管理系统mysql数据库web结构layUI布局apache计算机软件工程网页wamp

一、源码特点 PHP 服装销售管理系统是一套完善的web设计系统mysql数据库 &#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 php服装销售管理系统1 二、功能介绍 (1)员工管理&#xff1a;对员工信息…