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

EasyExcel 导入/出通用枚举映射

描述:在进行导入导出操作时经常需要进行一些枚举值key value转换,利用EasyExcel的转换器,封装公共方法,简化这一操作。

公共枚举和转换器

基础枚举

import java.util.Objects;/*** <p>Title: 通用基础枚举接口</p>* <p>Description: 定义枚举类的通用行为,提供code与desc之间的转换功能</p>** @author Ryan*/
public interface BaseCodeDescEnum {/*** 获取枚举code值* @return code值*/int getCode();/*** 获取枚举描述信息* @return 描述信息*/String getDesc();/*** 根据code获取desc* @param enumClass 枚举类class* @param code code值* @param <E> 实现BaseCodeDescEnum的枚举类型* @return 对应的desc,未找到返回空字符串*/static <E extends Enum<E> & BaseCodeDescEnum> String getDescByCode(Class<E> enumClass, Integer code) {if (code == null) {return "";}for (E e : enumClass.getEnumConstants()) {if (e.getCode() == code) {return e.getDesc();}}return "";}/*** 根据desc获取code* @param enumClass 枚举类class* @param desc 描述信息* @param <E> 实现BaseCodeDescEnum的枚举类型* @return 对应的code,未找到返回null*/static <E extends Enum<E> & BaseCodeDescEnum> Integer getCodeByDesc(Class<E> enumClass, String desc) {if (desc == null) {return null;}for (E e : enumClass.getEnumConstants()) {if (Objects.equals(e.getDesc(), desc)) {return e.getCode();}}return null;}
}

通用枚举转换器

import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import lombok.extern.slf4j.Slf4j;/*** <p>Title: 通用枚举转换器</p>* <p>Description: 用于Excel与Java枚举之间的数据转换,支持实现BaseCodeDescEnum接口的枚举类</p>** @author Ryan*/
@Slf4j
public class CommonEnumConverter<E extends Enum<E> & BaseCodeDescEnum> implements Converter<Integer> {private final Class<E> enumClass;public CommonEnumConverter(Class<E> enumClass) {this.enumClass = enumClass;}@Overridepublic Class<?> supportJavaTypeKey() {return Integer.class;}@Overridepublic CellDataTypeEnum supportExcelTypeKey() {return CellDataTypeEnum.STRING;}/*** Excel数据转换为Java数据* @param cellData Excel单元格数据* @param excelContentProperty Excel内容属性* @param globalConfiguration 全局配置* @return 转换后的Integer值*/@Overridepublic Integer convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) {if (cellData == null || cellData.getStringValue() == null) {return null;}Integer code = BaseCodeDescEnum.getCodeByDesc(enumClass, cellData.getStringValue());if (code == null) {log.warn("无法找到枚举描述'{}'对应的code值,枚举类型: {}",cellData.getStringValue(), enumClass.getSimpleName());}return code;}/*** Java数据转换为Excel数据* @param value Java中的Integer值* @param excelContentProperty Excel内容属性* @param globalConfiguration 全局配置* @return 转换后的Excel单元格数据*/@Overridepublic CellData<String> convertToExcelData(Integer value, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) {if (value == null) {return new CellData<>("");}String desc = BaseCodeDescEnum.getDescByCode(enumClass, value);if (desc == null || desc.isEmpty()) {log.warn("无法找到枚举code'{}'对应的描述值,枚举类型: {}",value, enumClass.getSimpleName());return new CellData<>("未知(" + value + ")");}return new CellData<>(desc);}
}

应用

具体枚举转换器

/*** <p>Title: 是否转换器</p>* <p>Description: Function Description </p>** @author Ryan*/
public class YesOrNoConverter extends CommonEnumConverter<YesOrNoEnum> {public YesOrNoConverter() {super(YesOrNoEnum.class);}
}

具体枚举

@Getter
public enum YesOrNoEnum implements BaseCodeDescEnum{/*** 0-否*/NO(0, "否"),/*** 1-是*/YES(1, "是");private final int code;private final String desc;YesOrNoEnum(int code, String desc) {this.code = code;this.desc = desc;}}

DTO应用

  /*** 是否备注 0|否;1|是;*/@ExcelProperty(value = "是否备注", converter = YesOrNoConverter.class)private Integer isRemark;
http://www.aitangshan.cn/news/23.html

相关文章:

  • dp09
  • 克隆arcgispro-py3虚拟环境
  • Air780EGH硬件开发必备:UART串口电路设计最佳实践
  • bytes和基本数据类型之间的转换
  • 糟糕,生产环境频繁Full GC,怎么办?
  • CSP/NOIP常用模板大全₍^˶⦁༝⦁˶^₎◞ ̑̑
  • 洛谷P1525 [NOIP 2010 提高组] 关押罪犯(恭喜解锁拆点并查集!!)
  • Score Matching
  • 对象转原始值
  • 通达信配色
  • I2C通信接口 VK2C22B 高抗干扰LED驱动段码液晶驱动芯片
  • 【自学嵌入式:stm32单片机】EXTI外部中断
  • Dify入门系列(1)| Dify 是什么?真能开启低代码 AI 应用开发?
  • 题解:P4368 [Code+#4] 喵呜
  • vue3 vue3-form-element表单生成工具
  • Codeforces 1042G Wafu! 题解 [ 绿 ] [ 数学 ] [ 线性 DP ] [ 前缀和 ] [ 暴力枚举 ]
  • 第二章:Linux基础命令
  • 题解:P4779 【模板】单源最短路径(标准版)
  • 事倍功半是蠢蛋39 cursor 报错user is unauthorized
  • 一个不错的AI写作工具
  • 2025CSP-S模拟赛33 比赛总结