背景:

问题:使用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. 常用的Numpy通用函数列表

    官网来源:Universal functions (ufunc) - NumPy v1.21 Manual 数学运算(Math operations) 表达式 定义 add(x1, x2, /[, o ...

  2. vue-cli4,vue3打包后页面无内容

    这个问题百度了一下,各种各样的的回答都有,试了好多种方法,终于解决这个问题 解决方法: 1.在项目根目录下,新建  vue.config.js, 在文件中输入: module.exports = { ...

  3. JS判断浏览器是否是IE

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. Mysql之主从异步

    数据库创建完后主从数据库数据保持同步 主数据库 mysql> SHOW MASTER STATUS; +------------------+----------+--------------+ ...

  5. 解密prompt系列27. LLM对齐经验之如何降低通用能力损失

    前面我们已经聊过众多指令微调的方案,这一章我们重点讨论下如何注入某一类任务或能力的同时,尽可能不损失模型原有的通用指令理解能力.因为在下游或垂直领域应用中,我们设计的推理任务风格或形式,往往很难通过p ...

  6. c# 框架系列 ———— EFCore 模型篇 [一]

    前言 简单介绍一下EfCore 的模型篇 正文 内容来源: 配置模型 配置模型的方式,一种是fluent api 还一种是属性的方式. public class Blog { public int B ...

  7. Lattice Crosslink开发简介

    选择lattice的Crosslink器件,大多是因为它功耗比较低.价格便宜,开发也比较简单,相对来说更容易上手.大部分用在手机屏,摄像头模组和平板方面. Crosslink的开发工具是Diamond ...

  8. easyx的使用 鼠标交互(3.1)

    本文学习于B站,进行借鉴学习记录: 视频链接:鼠标操作(新版)_哔哩哔哩_bilibili 初始化调用文件头不再使用#include<graphics.h>,选择调用#include< ...

  9. 力扣524(java)-通过删除字母匹配到字典里最长单词(中等)

    题目: 给你一个字符串 s 和一个字符串数组 dictionary ,找出并返回 dictionary 中最长的字符串,该字符串可以通过删除 s 中的某些字符得到. 如果答案不止一个,返回长度最长且字 ...

  10. JDBC 在性能测试中的应用

    简介: 我们能否绕开 http 协议,直接测试数据库的性能?是否觉得从数据库中导出 CSV 文件来构造压测数据很麻烦?怎样在压测结束后做数据清理?能不能通过数据库中的插入(删除)记录对压测请求做断言? ...