spring boot - 接口返回枚举值描述

spring boot - 接口返回枚举值描述

场景

在接口返回对象时,有时候需要返回枚举的描述,如果是list,还要每次遍历处理,现通过自定义注解实现

EnumBind

作用在 DTO 属性内,指枚举值

/*** 枚举描述绑定* @Date: 2024/12/2 18:22*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface EnumBind {/*** 枚举转换类* @return*/Class<? extends DictConvert<? extends Enum,?,?>> type();/*** 如要将 StatusEnum的 desc 显示在 UserDTO 中的 statusDesc 字段* 则 target: statusDesc* @return*/String target();
}/*** 响应自定义格式* 而不是默认数据格式 R* @Date: 2024/5/16 14:47*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RawResponse {}

DictConvert

枚举转换

/*** 字典枚举转换* @Date: 2024/12/3 16:01*/
public abstract class DictConvert<E extends Enum<E>, K, V> {/*** 缓存*/public Map<Class<? extends DictConvert>, Map<K, V>> cache = new ConcurrentHashMap<>();/*** 转换成 枚举值 及描述** @return*/public Map<K, V> convert() {return cache.computeIfAbsent(this.getClass(), k -> convert(getDictClz().getEnumConstants()));}/*** 枚举转换* @param enums* @return*/public abstract Map<K, V> convert(E[] enums);/*** 转换的具体枚举类型* @return*/public abstract Class<E> getDictClz();}

测试

定义枚举

@Data
public enum FruitCode{APPLE("apple","apple");private String code;@Getterprivate String desc;private FruitCode(String code, String desc) {this.code = code;this.desc = desc;}
}/*** @Date: 2024/12/3 16:41*/
@Data
public class FruitDto {/*** 枚举值字段* type: 指定转换类* target: 枚举值显示字段*/@EnumBind(type = FruitDictConvert.class,target = "desc")private String code;/*** 枚举描述显示字段*/private String desc;
}

定义转换

/*** @Date: 2024/12/3 16:04*/
@Component
public class FruitDictConvert extends DictConvert<FruitCode,String,String> {@Overridepublic Map<String, String> convert(FruitCode[] enumConstants) {return Arrays.stream(enumConstants).collect(Collectors.toMap(FruitCode::getCode,FruitCode::getDesc));}@Overridepublic Class<FruitCode> getDictClz() {return FruitCode.class;}
}

接口

/*** @Date: 2024/12/3 16:41*/
@RestController
public class EnumController {@EnumResponse@GetMapping("/get/fruit")public FruitDto getFruit() {FruitDto fruitDto = new FruitDto();fruitDto.setCode("apple");return fruitDto;}@EnumResponse@GetMapping("/get/fruits")public List<FruitDto> getFruits() {FruitDto fruitDto = new FruitDto();fruitDto.setCode("apple");List<FruitDto> list = new ArrayList<>();list.add(fruitDto);return list;}
}

结果:

{"code": "1","data": [{"code": "apple","desc": "apple"}]
}

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

IDL学习笔记(四)MODIS数据处理。MODIS数据介绍,以及Swath数据处理

MODIS数据处理 MODIS传感器介绍MODIS 数据产品Swath 数据Grid 数据 MODIS Swath 数据重投影对应ENVI接口UTM重投影 重投影后数据由ENVI版本&#xff0c;修改为GeoTiff格式。根据经纬度&#xff0c;快速重投影MODIS数据 下标 和 行列号转换 MODIS传感器介绍 MODlS (Moderate Re…

pushgateway HA高可用方案

未经本人同意不得转载&#xff0c;若引用请附上原文链接。 项目使用flink来处理kafka中的无界流数据&#xff0c;采用的是flink on yarn的模式部署flink任务。最近做flink任务的监控过程中&#xff0c;踩了一些坑。下面是过程&#xff0c;只想看最终方案的直接拉到最后。 先说…

burp常用机漏洞测试理论

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…

【深度学习】手机SIM卡托缺陷检测【附链接】

一、手机SIM卡托用途 SIM卡托是用于固定和保护SIM卡的部件&#xff0c;通过连接SIM卡与手机主板的方式&#xff0c;允许设备访问移动网络&#xff0c;用户可以通过SIM卡进行通话、发送短信和使用数据服务。 二、手机SIM卡托不良影响 SIM卡接触不良&#xff0c;造成信号中断&…

【机器学习】深入解析 PCA 与三元组损失:从理论推导到实践应用

深入解析 PCA 与三元组损失&#xff1a;从理论推导到实践应用 PCA (Principal Component Analysis) 主成分分析详解1. 基本概念1.1 什么是 PCA&#xff1f;1.2 核心目标1.3 应用场景 2. 数学原理详解2.1 问题形式化2.2 数据预处理2.3 协方差矩阵的计算2.4 特征值分解2.5 最大方…

记录:ubuntu 使用chattts的过程。

你知道什么是穷人吗&#xff1f;穷人就是没钱还想学习。 git GitHub - 2noise/ChatTTS: A generative speech model for daily dialogue. 因为所以。cosyvoice&#xff0c;gpt-s . 0.先找一个目录吧。 1.命令行模式 duyichengduyicheng-computer:~/gitee$ git clone https:…

开源 - Ideal库 - Excel帮助类,ExcelHelper实现(五)

书接上回&#xff0c;我们继续来聊聊ExcelHelper的具体实现。 01、读取Excel到DataSet单元测试 在上一章我们主要讲解了读取Excel到DataSet的三个重载方法具体实现&#xff0c;还没来得及做单元测试&#xff0c;因此我们首先对这三个方法做个单元测试。具体代码如下&#xff1…

CCF-GESP 编程能力认证 C++ 七级 2024年9月份选择题详细解析

第 1 题 已知小写字母 b 的 ASCII 码为 98 &#xff0c;下列 C 代码的输出结果是&#xff08;B&#xff09;。 #include <iostream> using namespace std; int main() {char a b;a;cout << a;return 0; } A. b B. c C. 98 D. 99 【这题很简单&#xff0c;我们只…

Oceanbase离线集群部署

准备工作 两台服务器 服务器的配置参照官网要求来 服务器名配置服务器IPoceanbase116g8h192.168.10.239oceanbase216g8h192.168.10.239 这里选oceanbase1作为 obd机器 oceanbase安装包 选择社区版本的时候自己系统的安装包 ntp时间同步rpm包 联网机器下载所需的软件包 …

动手学深度学习d2l包M4芯片 gpu加速

conda创建环境 CONDA_SUBDIRosx-arm64 conda create -n ml python3.9 -c conda-forge conda env config vars set CONDA_SUBDIRosx-arm64 conda activate mlpip安装包 pip install --pre torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/n…

Y20030046 Java+JSP+SpringBoot+MYSQL+LW+实验室管理系统的设计与实现 源码

实验室管理系统 1.摘要2.开发目的和意义3.系统功能设计4.系统界面截图5.源码获取 1.摘要 摘 要 伴随互联网的快速发展&#xff0c;国家对当前教育行业实行了新的改革&#xff0c;科学教育要培养更多的技术型人才&#xff0c;2020年全球爆发的新冠疫情&#xff0c;更是推动了科…

AG32 MCU与STM32 等MCU有哪些不同

STM32 MCU的特点 STM32一般是M0,M3, M4等内核的ARM Cortex内核的MCU&#xff0c;仅仅作为MCU使用&#xff0c;没有内置CPLD/FPGA的功能。 2. AG32的特点 AG32是AGM近2年来推出的差异化设计的SOC。以下我们了解以下AG32的特点。 &#xff08;1&#xff09;. 芯片结构&#xff…

【vscode】如何在项目中分享插件?

文章目录 前言一、如何获取插件名称呢&#xff1f;二、项目应用 前言 分享插件&#xff0c;除了将插件名字告诉你的小伙伴&#xff0c;当然还有其他的办法 项目根目录下创建.vscode 文件夹添加extensions.json文件 如下图 一、如何获取插件名称呢&#xff1f; 二、项目应用 …

【css】基础(一)

本专栏内容为&#xff1a;前端专栏 记录学习前端&#xff0c;分为若干个子专栏&#xff0c;html js css vue等 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;css专栏 &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &a…

Qt学习笔记第51到60讲

第51讲 记事本实现打开功能 回到第24个功能文件Notepad&#xff0c;给UI中的各个控件添加槽函数。 ①开始按钮 void Widget::on_btnOpen_clicked() {QString fileNameQFileDialog::getOpenFileName(this,tr("Open File"),"E:\\6_Qt Projects\\24_Notepad\\fi…

WPS解决Word文件引入excel对象文件无法打开提示“不能启动此对象...”的问题

一、问题现象 接收到了一份 Word文件&#xff0c;里面引入了一个Excel对象文件&#xff0c;双击时候&#xff0c;wps出现卡顿&#xff0c;过一会之后弹出错误提示&#xff1a;不能启动此对象... 二、解决方法 1.点击WPS左上角图标&#xff0c;并打开右上角设置&#xff0c;萱蕚…

# issue 8 TCP内部原理和UDP编程

TCP 通信三大步骤&#xff1a; 1 三次握手建立连接; 2 开始通信&#xff0c;进行数据交换; 3 四次挥手断开连接&#xff1b; 一、TCP内部原理--三次握手 【第一次握手】套接字A∶"你好&#xff0c;套接字B。我这儿有数据要传给你&#xff0c;建立连接吧。" 【第二次…

什么是人工智能?(Chapter 2)

Chapter 2&#xff1a; 大家到底在争论什么&#xff1f; 2022 年末&#xff0c;OpenAI 发布 ChatGPT 后不久&#xff0c;网上开始流传一个新的备忘录&#xff0c;它比其他任何东西都更能捕捉到这项技术的诡异之处。在大多数版本中&#xff0c;一个名为 "食人魔"&am…

OpenCV-平滑图像

二维卷积(图像滤波) 与一维信号一样&#xff0c;图像也可以通过各种低通滤波器&#xff08;LPF&#xff09;、高通滤波器&#xff08;HPF&#xff09;等进行过滤。LPF 有助于消除噪音、模糊图像等。HPF 滤波器有助于在图像中找到边缘。 opencv 提供了函数 **cv.filter2D()**&…

如何使用 Docker Compose 安装 Memos 自托管笔记应用

简介 Memos是一个自托管的开源笔记应用程序&#xff0c;专为个人组织和信息管理而设计。它允许用户高效地创建、存储和管理笔记&#xff0c;提供如Markdown支持、用户友好的界面和注重隐私的设计等功能。Memos可以在各种平台上运行&#xff0c;但使用Docker Compose可以简化部…