当前位置: 首页 > news >正文

SpringBoot数据字典字段自动生成对应code和desc

效果:接口会返回orderType,但是这个orderType是枚举的类型(1,2,3,4),我想多返回一个orderTypeDesc给前端展示,这样前端就可以直接拿orderTypeDesc使用了。

1. 定义注解

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
//作用是将当前类上的注解也追加到目标类上,如果不加的话,目标类及时加了@EnumTranslation注解,也不会集成该注解的所有注解
@JacksonAnnotationsInside
@JsonSerialize(using = EnumTranslationSerialize.class)
public @interface EnumTranslation {//生成的属性名,不写默认原名+DescString generateFieldName() default "";//参考的枚举,会根据改枚举的code获取对应的descClass<? extends Enum<?>> targetEnum() ;
}

2. 定义EnumTranslationSerialize类

EnumTranslationSerialize继承了JsonSerializer,实现了ContextualSerializer,用于序列化时多生成一个字段返回。

ContextualSerializer的作用:为了在序列化时获取属性上的注解信息,然后根据注解信息重新创建EnumTranslationSerialize来序列化,这样就能根据注解的配置来序列化了。

@Slf4j
public class EnumTranslationSerialize<E> extends JsonSerializer<Object> implements ContextualSerializer {private String targetFieldName;private LinkedHashMap<String, String> enumMap;public EnumTranslationSerialize() {//需要空构造方法,请勿删除}/*** 构造方法,获取当前属性名,生成的属性名,目标枚举*/public EnumTranslationSerialize(String fieldName, String targetFieldName, Class enumClass) {if (StringUtils.isNotBlank(targetFieldName)) {this.targetFieldName = targetFieldName;} else {this.targetFieldName = fieldName + "Name";}enumMap = new LinkedHashMap<>();try {Method getCode = enumClass.getMethod("getCode");Method getDesc = enumClass.getMethod("getDesc");for (Object everyEnum : EnumUtil.getEnumMap(enumClass).values()) {enumMap.put(getCode.invoke(everyEnum).toString(), getDesc.invoke(everyEnum).toString());}} catch (Exception e) {log.error(ExceptionUtils.getStackTrace(e));}}/*** 序列化规则*/@Overridepublic void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {if (Objects.isNull(o)) {return;}try {String codeValue = o.toString();jsonGenerator.writeString(codeValue);String value = enumMap.get(codeValue);//多写入一个属性if (Objects.nonNull(value)) {jsonGenerator.writeFieldName(this.targetFieldName);jsonGenerator.writeObject(value);}} catch (Exception e) {log.error(ExceptionUtils.getStackTrace(e));}}/*** ContextualSerializer接口的方法,作用是获取属性上的枚举*/@Overridepublic JsonSerializer<?> createContextual(SerializerProvider serializerProvider, BeanProperty beanProperty) throws JsonMappingException {if (beanProperty != null) {EnumTranslation t = beanProperty.getAnnotation(EnumTranslation.class);if (t != null) {return new EnumTranslationSerialize<>(beanProperty.getName(), t.targetFieldName(), t.enumC());}}return serializerProvider.findNullValueSerializer(beanProperty);}
}

3. 使用

@Data
public class OrderVO {@Schema(description = "订单类型")@EnumTranslation(generateFieldName = "orderTypeDesc", enumC = OrderType.class)private Long orderType;
}

相关文章:

SpringBoot数据字典字段自动生成对应code和desc

效果&#xff1a;接口会返回orderType&#xff0c;但是这个orderType是枚举的类型&#xff08;1&#xff0c;2&#xff0c;3&#xff0c;4&#xff09;&#xff0c;我想多返回一个orderTypeDesc给前端展示&#xff0c;这样前端就可以直接拿orderTypeDesc使用了。 1. 定义注解 …...

TencentOS 2.4 final 安装mysql8.0备忘录

准备 tencentOS 2.4 与Red Hat Enterprise Linux 7 是兼容的。 我们首先从oracle官网上下载mysql的源文件。 下载完成后你会得到以下文件&#xff1a; mysql84-community-release-el7-1.noarch.rpm 安装 首先你需要切换到root用户下。 1.安装源文件 yum localinstall my…...

Hadoop HA安装配置(容器环境),大数据职业技能竞赛模块A平台搭建,jdk+zookeeper+hadoop HA

HA概述 &#xff08;1&#xff09; 所谓HA&#xff08;High Availablity&#xff09;,即高可用&#xff08;7*24小时不中断服务&#xff09;。 &#xff08;2&#xff09; 实现高可用最关键的策略是消除单点故障&#xff0c;HA严格来说应该分为各个组件的HA机制&#xff0c;H…...

使用javascript读取波形文件数据,并生成动态的波形图

代码如下&#xff1a; // HTML5 Canvas 动态波形生成器 // 使用JS读取波形文件并生成动态波形// 创建Canvas并设置上下文 const canvas document.createElement(canvas); canvas.width 800; canvas.height 400; document.body.appendChild(canvas); const ctx canvas.getC…...

服务器系统维护与安全配置

一、硬件系统的安全防护   硬件的安全问题也可以分为两种&#xff0c;一种是物理安全&#xff0c;一种是设置安全。   1、物理安全   物理安全是指防止意外事件或人为破坏具体的物理设备&#xff0c;如服务器、交换机、路由器、机柜、线路等。机房和机柜的钥匙一定要管理…...

大模型Weekly 03|OpenAI o3发布;DeepSeek-V3上线即开源!

大模型Weekly 03&#xff5c;OpenAI o3发布&#xff1b;DeepSeek-V3上线即开源&#xff01;DeepSeek-V3上线即开源&#xff1b;OpenAI 发布高级推理模型 o3https://mp.weixin.qq.com/s/9qU_zzIv9ibFdJZ5cTocOw?token47960959&langzh_CN 「青稞大模型Weekly」&#xff0c;持…...

Spring Boot自定义注解获取当前登录用户信息

写在前面 在项目开发过程中&#xff0c;难免都要获取当前登录用户的信息。通常的做法&#xff0c;都是开发一个获取用户信息的接口。 如果在本项目中&#xff0c;多处都需要获取登录用户的信息&#xff0c;难不成还要调用自己写的接口吗&#xff1f;显然不用&#xff01; 以…...

js创建二维空数组

js创建二维空数组 错误使用原因分析分析1举个例子&#xff1a;解释&#xff1a; 正确创建二维数组总结&#xff1a; 错误使用 今天在写代码的时候&#xff0c;需要创建一个长度为2的空二维数组&#xff0c;我当时第一反应就是&#xff0c;使用let arr new Array(2).fill([])&…...

AF3 checkpoint_blocks函数解读

checkpoint_blocks 函数实现了一种分块梯度检查点机制 (checkpoint_blocks),目的是通过分块(chunking)执行神经网络模块,减少内存使用。在深度学习训练中,梯度检查点(activation checkpointing)是一种显存优化技术。该代码可以: 对神经网络的块(blocks)按需分块,并对…...

下载并使用CICFlowMeter提取网络流特征(Windows版本)

CICFlowMeter简介 CICFlowMeter是一款流量特征提取工具&#xff0c;从原始的pcap包中聚合流&#xff0c;并提取流特征到csv格式的文件中。使用CICFlowMeter提取的特征有助于后续基于网络流的分析与建模 官方github地址&#xff1a;https://github.com/ahlashkari/CICFlowMete…...

深入了解JSON-LD:语义化网络数据的桥梁

目录 前言1. JSON-LD概述1.1 什么是JSON-LD&#xff1f;1.2 JSON-LD的优势 2. JSON-LD的核心概念2.1 上下文&#xff08;Context&#xff09;2.2 词汇表&#xff08;Vocabulary&#xff09;2.3 标注语言&#xff08;Markup Language&#xff09; 3. JSON-LD的语法与结构3.1 基本…...

分布式 IO 模块助力冲压机械臂产线实现智能控制

在当今制造业蓬勃发展的浪潮中&#xff0c;冲压机械臂产线的智能化控制已然成为提升生产效率、保障产品质量以及增强企业竞争力的关键所在。而分布式 IO 模块的应用&#xff0c;正如同为这条产线注入了一股强大的智能动力&#xff0c;开启了全新的高效生产篇章。 传统挑战 冲压…...

webrtc源码编译【linux/安卓】

编译webrtc库 环境ubuntu22.04 推荐在linux里运行一个docker容器&#xff0c;在新环境里搭建。 准备工作 #我使用了下面的安装命令。目前知道的必须需要的 git python3 unzip ninja jdk file lsb-release apt install -y git curl build-essential python3 python3-pip pyt…...

亚矩阵云手机

亚矩阵云手机是一个集成了云计算、大数据、人工智能和边缘计算等先进技术的云平台&#xff0c;它通过ARM虚拟化技术在云端运行手机应用&#xff0c;提供了全面、高效且稳定的服务。以下是对亚矩阵云手机的详细解析: 技术基础与架构 1.ARM虚拟化技术:亚矩阵云手机基于ARM服务器和…...

Flink状态编程

Flink处理机制的核心就是“有状态的流处理”&#xff0c;在某些情况下&#xff0c;一条数据的计算不仅要基于当前数据自身&#xff0c;还需要依赖数据流中的一些其他数据。这些在一个任务中&#xff0c;用来辅助计算的数据我们就称之为这个任务的状态。 一、按键分区状态&…...

【Django篇】--动手实现路由模块化与路由反转

一、路由模块化 在一个Django项目中&#xff0c;由于功能类别不同&#xff0c;因此需要将不同功能进行模块化设计。在Django项目中模块化设计则需要将不同模块封装为对应的app模块&#xff0c;每一个模块中涉及到的路由则也需要进行模块化设计&#xff0c;才能更好的让整个项目…...

多元统计分析练习题3

从总体 A A A 和 B B B 中分别抽取 n 10 n10 n10 个样本 假设 A , B A,B A,B 协方差矩阵相同&#xff0c;并且服从多元正态分布 计算得到的样本均值和样本离差阵分别为 X ‾ A ( 1 , 2 , 3 ) T , V B d i a g ( 1 , 1 , 1 ) X ‾ B ( 1.5 , 2.5 , 3.5 ) T , V B d i…...

windows remote desktop service 远程桌面RDS授权激活

windows remote desktop service 远程桌面RDS授权激活 功能介绍&#xff1a;操作步骤&#xff1a;1、添加远程桌面授权服务2、添加远程桌面授权许可 功能介绍&#xff1a; 本文以 windows Server 2016为例&#xff0c;系统默认远程桌面连接数是2个用户&#xff0c;如果多余两个…...

6-pandas数据读取

前言 一、分组聚合 1.groupby使用&#xff1a; groupby() 是 pandas 库中用于对数据进行分组操作的一个非常重要的方法。 import pandas as pddata {城市: [北京, 上海, 广州, 北京, 上海, 广州],人口: [2154, 2424, 1303, 2154, 2424, 1303],年龄: [25, 30, 35, 25, 30, 3…...

【Logback详解】

Logback详解 Logback 是一个用于 Java 应用的日志框架&#xff0c;它由 Log4j 的创始人 Ceki Glc 创建。Logback 分为三个模块&#xff1a;logback-core、logback-classic 和 logback-access。logback-classic 模块实现了 SLF4J (Simple Logging Facade for Java) API&#xf…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...