EasyExcel未使用@AccessChain注解也读取不到文件内容,返回null问题的解决方案

在使用阿里EasyExcel进行批量读取文件时遇到问题,实体类对象属性读取为空。尽管尝试去掉@AccessChain注解或调整其属性,问题依旧存在。经过研究发现,EasyExcel依赖Cglib,要求成员变量遵循驼峰命名法。按照此规则修改实体类后,成功读取到文件内容。
摘要由CSDN通过智能技术生成

EasyExcel未使用@AccessChain注解也读取不到文件内容,返回null问题的解决方案

问题背景介绍

最近在用阿里的easyexcel做批量读取时,总是读不到文件数据,具体地说就是invoke()中传入的实体类对象的属性都为空,但是读取表头的方法invokeHeadMap()缺能读到数据。

在网上查了很多资料,也有不少人都遇到类似的问题,但是基本上都是说去掉实体类里的@AccessChain,或者说令这个注解的属性为false,但是我检查了一下我的实体类里面除了@Data注解没用到其他的注解。

后来去EasyExcel官网上查了一下,原来是要变量满足驼峰命名法才可以

官方原话:

读写反射对象用到了Cglib,所以成员变量必须符合驼峰规范

以下是我的工程修改前后的代码:

修改之前:


//跟excel对应的实体类
@Data
public class SubjectData {
   


    @ExcelProperty(value =
您可以使用EasyExcel库中的@ExcelProperty注解来实现自定义转换器。@ExcelProperty注解用于将Java对象的属性与Excel表格的列进行映射。 首先,您需要创建一个实现了Converter接口的自定义转换器类。Converter接口有两个方法需要实现:convertToExcelData和convertToJavaData。convertToExcelData方法将Java对象属性转换为Excel表格中要写入的数据,而convertToJavaData方法将Excel表格中读取的数据转换为Java对象属性。 以下是一个示例的自定义转换器类: ```java import com.alibaba.excel.converters.Converter; import com.alibaba.excel.metadata.CellData; import com.alibaba.excel.metadata.GlobalConfiguration; import com.alibaba.excel.metadata.property.ExcelContentProperty; public class CustomConverter implements Converter<Object> { @Override public Class<?> supportJavaTypeKey() { return null; // 返回支持的Java类型 } @Override public CellData<Object> convertToExcelData(Object value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { // 将Java对象属性转换为Excel表格中要写入的数据,返回CellData对象 // 实现转换逻辑 return new CellData<>(value); } @Override public Object convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { // 将Excel表格中读取的数据转换为Java对象属性,返回对应类型的值 // 实现转换逻辑 return cellData.getData(); } } ``` 然后,在您的Java对象的属性上使用@ExcelProperty注解,并指定自定义转换器类: ```java public class YourObject { @ExcelProperty(converter = CustomConverter.class) private Object yourProperty; // 其他属性和方法 } ``` 这样,在使用EasyExcel读取或写入Excel表格时,会自动应用您定义的转换器来实现自定义的转换逻辑。 希望对您有帮助!如有问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值