首页 > 其他分享 >swagger文档枚举类型描述

swagger文档枚举类型描述

时间:2024-04-07 11:23:25浏览次数:28  
标签:return String add 枚举 文档 swagger public desc

背景:

问题:使用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

标签:return,String,add,枚举,文档,swagger,public,desc
From: https://www.cnblogs.com/zmj-pr/p/18118699

相关文章

  • 在线视频教育平台|基于Springboot的在线视频教育平台系统设计与实现(源码+数据库+文档
    在线视频教育平台目录基于Springboot的在线视频教育平台系统设计与实现一、前言二、系统设计三、系统功能设计 1、前台:2、后台用户功能模块教师功能模块四、数据库设计 五、核心代码 六、论文参考七、最新计算机毕设选题推荐八、源码获取:博主介绍:✌️大......
  • 使用POI填充Word文档,一些注意事项以及解决办法
    有这样一个需求:需要将用户输入的数据填写到准备好的Word模版中并提供下载,最终选择POI-tl和POI来完成上述需求。在这个过程中,主要遇到了以下两个问题:1.Word的两个格式doc和docx(两种文件的区别大家可以自行百度了解下),POI并没有提供统一的处理类。分别用HWPFDocument处理doc......
  • [蓝桥杯 2022 国 B] 齿轮(优化枚举)
        根据题目描述,如果采用dfs暴力做法枚举所有方案,肯定会超时,因此我们需要优化枚举,我们都知道在同一组共同转动的齿轮中,线速度相等,因此角速度的比值就是半径的反比,因此我们只需要找到对于每个齿轮作为起始齿轮,只需要找到其倍数半径是否存在即可,而倍数上限就是假设存在......
  • [蓝桥杯 2021 省 B] 杨辉三角形(二分查找+枚举)
        我们之前学过有关杨辉三角的一些性质,我们知道杨辉三角某个数等于左上和右上两个数相加,但是如果我们按照这个性质依次枚举每行每列,就会很容易超时,因此我们可以枚举列,再二分查找行来寻找满足要求的答案,我们可以先将列数到30,基本涵盖了所有的答案,通过组合数性质来二......
  • Cisco ISO升级文档
    第一步查看flash是否有足够的空间Switch#dir第二步将U盘插入交换机USB接口*Sep1310:26:48.686:%IOSD_INFRA-6-IFS_DEVICE_OIR:Deviceusbflash0addedSwitch#copyusbflash0:cat9k_lite_iosxe.17.06.04.SPA.binflash:第三步将U盘中的cat9k_lite_iosxe.17.06.04.SPA......
  • swagger报错
    解决此错误:无法将apis(com.google.common.base.Predicate)应用于(java.util.function.Predicate)在本篇博客中,我将分享我在完成黑马项目苍穹外卖导入knife4j依赖过程中遇到的报错。通过这篇博客,希望能帮助到其他遇到相似问题的,并加深自对问题的理解解决能力报错描述api......
  • 【包远程安装运行】SpringBoot+Mysql实现的在线兼职实习招聘管理系统源码+运行教程+开
    今天发布的是由【猿来入此】的优秀学员独立做的一个基于springboot脚手架的在线招聘系统,主要实现了在线招聘基本操作流程的全部功能,系统分普通用户、管理员等角色,除基础脚手架外,实现的功能有:管理员:系统管理、职位管理、新闻咨询管理、简历投递管理、在线统计等。普通用户(......
  • 【包远程安装运行】:SpringBoot+Mysql健身房在线预约管理系统源码+运行视频+开发文档(参
    今天发布的是由【猿来入此】的优秀学员独立做的一个基于springboot脚手架的健身房在线预约管理系统,系统分四个角色,管理员,职工、教练、前台用户,各角色功能如下:管理员:系统管理(角色、权限、菜单等)、职工管理、健身会员管理、会员充值管理、健身项目管理、健身百科管理、健身......
  • 【MATLAB源码-第170期】基于matlab的BP神经网络股票价格预测GUI界面附带详细文档说明
    操作环境:MATLAB2022a1、算法描述基于BP神经网络的股票价格预测是一种利用人工神经网络中的反向传播(Backpropagation,简称BP)算法来预测股票市场价格变化的技术。这种方法通过模拟人脑的处理方式,尝试捕捉股票市场中的复杂非线性关系,以实现对未来股价的预测。本文将详细介绍BP......
  • java计算机毕业设计(附源码)原创网络文学管理系统(ssm+mysql+maven+LW文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义标题:原创网络文学管理系统的开发背景在数字化时代背景下,网络文学作为一种新兴的文学形式,以其便捷、互动性强的特点迅速崛起,成为文化消费的重要领域。随着网络文学......