背景:

问题:使用swagger作为api文档,但文档中的枚举类型仅显示枚举name,对于使用文档的人员来讲不容易理解

解决思路:枚举类型加上自定义的描述

解决方案

maven配置

        <dependency>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-models-jakarta</artifactId>
<version>2.2.8</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
<version>4.1.0</version>
</dependency>

swagger配置,自定义PropertyCustomizer,将实现BaseEnum接口的枚举类型desc字段作为枚举值的描述,使用BaseEnum的目的是保证枚举类中包含desc描述字段,便于统一获取

    @Bean
public PropertyCustomizer propertyCustomizer() { return new PropertyCustomizer() {
@Override
public Schema customize(Schema property, AnnotatedType type) {
property.setName(StrUtil.toUnderlineCase(type.getPropertyName())); if (!isEnumType(type)) {
return property;
} Object[] enumConstants = ((SimpleType) type.getType()).getRawClass()
.getEnumConstants(); StringJoiner sj = new StringJoiner("");
sj.add(Optional.ofNullable(property.getDescription()).orElse(""))
.add(" ~ ")
.add(" 【 ");
for (Object enumConstant : enumConstants) {
Enum anEnum = (Enum) enumConstant;
String name = anEnum.name();
sj.add(name).add(":");
if (enumConstant instanceof BaseEnum dtoEnum) {
String desc = dtoEnum.getDesc();
sj.add(desc)
.add(";")
.add(" ");
} }
sj.add("】");
property.setDescription(sj.toString());
return property; }
}; } private boolean isEnumType(AnnotatedType type) {
return Optional.ofNullable(type)
.map(AnnotatedType::getType)
.filter(s -> s instanceof SimpleType)
.map(s -> (SimpleType) s)
.map(SimpleType::getRawClass)
.map(clazz -> clazz.isEnum()
&& Stream.of(clazz.getInterfaces())
.anyMatch(s -> s.isAssignableFrom(BaseEnum.class)))
.orElse(Boolean.FALSE);
}
public interface BaseEnum<T> {
T getCode();
String getDesc();
}

枚举demo

public enum Level implements BaseEnum<String> {
JUNIOR("00", "初级"),
SENIOR("01", "高级"),
; final String code;
final String desc; Level(String code, String desc) {
this.code = code;
this.desc = desc;
} @Override
public String getCode() {
return code;
} @Override
public String getDesc() {
return desc;
}
}

文档效果:

参数字段描述中显示:【 JUNIOR:初级; SENIOR:高级; 】,可用值:JUNIOR,SENIOR

swagger文档枚举类型描述的更多相关文章

  1. 利用typescript生成Swagger文档

    项目地址:https://github.com/wz2cool/swagger-ts-doc demo代码地址:https://github.com/wz2cool/swagger-ts-doc-de ...

  2. 使用 Swagger 文档化和定义 RESTful API

    大部分 Web 应用程序都支持 RESTful API,但不同于 SOAP API——REST API 依赖于 HTTP 方法,缺少与 Web 服务描述语言(Web Services Descript ...

  3. API接口文档中将Swagger文档转Word 文档

    一般的开发工作,尤其是API接口的开发工作,首先要有开发文档,接口说明文档 ok,后来开发完毕了 和页面联调,或者是和第三方联调的时候, 这个时候,SA systeam admin 就会开始直接让开发 ...

  4. revel + swagger 文档也能互动啦

    beego 从 1.3 后开始支持自动化API文档,不过,目测比较复杂,一直期望 revel 能有官方支持. revel 确实已经有了官方支持的计划,有可能将在 0.14 版本支持,现在才 0.11. ...

  5. Swagger文档转Word 文档

    GitHub 地址:https://github.com/JMCuixy/SwaggerToWord/tree/developer 原创作品,转载请注明出处:http://www.cnblogs.co ...

  6. springboot成神之——swagger文档自动生成工具

    本文讲解如何在spring-boot中使用swagger文档自动生成工具 目录结构 说明 依赖 SwaggerConfig 开启api界面 JSR 303注释信息 Swagger核心注释 User T ...

  7. Swagger文档转Word

    Swagger文档转Word 文档   GitHub 地址:https://github.com/JMCuixy/SwaggerToWord/tree/developer 原创作品,转载请注明出处:h ...

  8. Spring Boot:整合Swagger文档

    综合概述 spring-boot作为当前最为流行的Java web开发脚手架,越来越多的开发者选择用其来构建企业级的RESTFul API接口.这些接口不但会服务于传统的web端(b/s),也会服务于 ...

  9. Core + Vue 后台管理基础框架8——Swagger文档

    1.前言 作为前后端分离的项目,或者说但凡涉及到对外服务的后端,一个自描述,跟代码实时同步的文档是极其重要的.说到这儿,想起了几年前在XX速运,每天写完代码,还要给APP团队更新文档的惨痛经历.给人家 ...

  10. SpringBoot系列:六、集成Swagger文档

    本篇开始介绍Api文档Swagger的集成 一.引入maven依赖 <dependency> <groupId>io.springfox</groupId> < ...

随机推荐

  1. #网络流,树状数组#JZOJ 4020 Revolution with JZOJ 4018 Magic

    CF297E Mystic Carvings=JZOJ 4018 Magic JZOJ 4020 Revolution 题目 有一个\(n*m(n,m\leq 20)\)的网格图 这格子有收益当且仅当 ...

  2. #点分治#洛谷 4149 [IOI2011]Race

    题目 给一棵树,每条边有权.求一条简单路径,权值和等于 \(k\),且边的数量最小. 分析 点分治,记录一定权值的最小边数量, 每遍历一棵子树后统计答案 代码 #include <cstdio& ...

  3. 使用Python插入100万条数据到MySQL数据库并将数据逐步写出到多个Excel

    Python插入100万条数据到MySQL数据库 步骤一:导入所需模块和库 首先,我们需要导入 MySQL 连接器模块和 Faker 模块.MySQL 连接器模块用于连接到 MySQL 数据库,而 F ...

  4. OpenHarmony社区运营报告(2023年12月)

      • 截至2023年12月22日,OpenAtom OpenHarmony(简称"OpenHarmony")社区累计超过6700名贡献者,产生26.9万多个PR,2.4万多个St ...

  5. 将Map中对应的key和value赋值到对象中

    BeanUtils位于import org.apache.commons.beanutils.BeanUtils包下 其使用方法: Map<String, Object> objectMa ...

  6. MogDB/opengauss触发器简介(1)

    MogDB/opengauss 触发器简介(1) 触发器是对应用动作的响应机制,当应用对一个对象发起 DML 操作时,就会产生一个触发事件(Event).如果该对象上拥有该事件对应的触发器,那么就会检 ...

  7. ​总结:Apache/Tomcat/JBOSS/Jetty/Nginx之区别和联系​

    总结:Apache/Tomcat/JBOSS/Jetty/Nginx之区别和联系 总结:Apache/Tomcat/JBOSS/Nginx区别 . 1.Apache是Web服务器,Tomcat是应用( ...

  8. C++ 递归与面向对象编程基础

    C++ 递归 递归是一种使函数调用自身的技术.这种技术提供了一种将复杂问题分解为简单问题的方法,从而更容易解决问题. 递归可能有点难以理解.理解其工作原理的最佳方法是通过实验来尝试. 递归示例 将两个 ...

  9. leetcode - 子数组最大平均值

    给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数. 示例: 输入:[1,12,-5,-6,50,3], k = 4 输出:12.75 解释:最大平均数 (12-5-6+5 ...

  10. React纯组件的使用

    1. 有无必要使用纯组件 如果应用不是很大型,页面渲染效率使用纯组件与非纯组件差别不大,尽量使用组件 应用一定注意,setState时子组件依赖渲染的属性一定要传递给子组件,不然父组件setState ...