From f8d15285528be1d36a583462ec3800335d183745 Mon Sep 17 00:00:00 2001 From: wangtong_b Date: Mon, 12 Aug 2024 16:52:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=9D=E8=AF=95=E4=BF=AE=E5=A4=8D=20issue=20?= =?UTF-8?q?#3905?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../listener/ModelBuildEventListener.java | 15 +-- easyexcel-support/pom.xml | 1 + .../test/demo/read/TestAccessor.java | 90 ++++++++++++++++++ .../test/resources/demo/testAccessors.xlsx | Bin 0 -> 9458 bytes pom.xml | 4 +- 5 files changed, 103 insertions(+), 7 deletions(-) create mode 100644 easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/TestAccessor.java create mode 100644 easyexcel-test/src/test/resources/demo/testAccessors.xlsx diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java index fab5a7c6..195efdcc 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java @@ -1,5 +1,6 @@ package com.alibaba.excel.read.listener; +import java.lang.reflect.Field; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.Map; @@ -15,11 +16,8 @@ import com.alibaba.excel.metadata.data.ReadCellData; import com.alibaba.excel.read.metadata.holder.ReadSheetHolder; import com.alibaba.excel.read.metadata.property.ExcelReadHeadProperty; import com.alibaba.excel.support.cglib.beans.BeanMap; -import com.alibaba.excel.util.BeanMapUtils; -import com.alibaba.excel.util.ClassUtils; -import com.alibaba.excel.util.ConverterUtils; -import com.alibaba.excel.util.DateUtils; -import com.alibaba.excel.util.MapUtils; +import com.alibaba.excel.support.util.ReflectionUtils; +import com.alibaba.excel.util.*; /** @@ -147,7 +145,12 @@ public class ModelBuildEventListener implements IgnoreExceptionReadListener org/springframework/asm/** org/springframework/cglib/** + org/springframework/util/* diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/TestAccessor.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/TestAccessor.java new file mode 100644 index 00000000..7b39bcc4 --- /dev/null +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/TestAccessor.java @@ -0,0 +1,90 @@ +package com.alibaba.easyexcel.test.demo.read; + +import com.alibaba.easyexcel.test.util.TestFileUtil; +import com.alibaba.excel.EasyExcelFactory; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.event.AnalysisEventListener; +import com.alibaba.excel.metadata.CellExtra; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.Data; +import lombok.experimental.Accessors; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Test; + +import java.io.File; + +/** + * 测试使用 lombok 的 @Accessors(chain = true) 注解无法映射到对象对应属性的问题 + */ +public class TestAccessor { + + private static final ObjectMapper objectMapper = new ObjectMapper(); + + @Test + public void importToRegulation () { + + + String fileName = TestFileUtil.getPath() + "demo" + File.separator + "testAccessors.xlsx"; + + EasyExcelFactory + .read(fileName, User.class, new UserListener()) + .sheet().doRead(); + + + } + + + @Data + @Accessors(chain = true) + public static class User { + + @ExcelProperty(index = 0) + private String name; + @ExcelProperty(index = 1) + private Integer age; + + } + + + @Slf4j + public static class UserListener extends AnalysisEventListener { + + @Override + public void onException(Exception exception, AnalysisContext context) throws Exception { + super.onException(exception, context); + } + + /** + * 这个每一条数据解析都会来调用 + */ + @Override + public void invoke(User data, AnalysisContext context) { + + try { + log.info("解析到一条数据:{}", objectMapper.writeValueAsString(data)); + } catch (JsonProcessingException e) { + log.error("序列化成 json 失败: {}", e.getMessage()); + } + + } + + @Override + public void extra(CellExtra extra, AnalysisContext context) { + super.extra(extra, context); + } + + @Override + public void doAfterAllAnalysed(AnalysisContext analysisContext) { + + } + + @Override + public boolean hasNext(AnalysisContext context) { + return super.hasNext(context); + } + + } + +} diff --git a/easyexcel-test/src/test/resources/demo/testAccessors.xlsx b/easyexcel-test/src/test/resources/demo/testAccessors.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..e4b3fdef1a3c34880adb5d02693188e39d1bdab2 GIT binary patch literal 9458 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 awtrs%P?UxJxmeM`*J$9uxLM*SyZ;9nSUI-< literal 0 HcmV?d00001 diff --git a/pom.xml b/pom.xml index a9734c4d..04dac1d4 100644 --- a/pom.xml +++ b/pom.xml @@ -90,7 +90,9 @@ com.alibaba easyexcel-support - 3.3.4 + + + ${revision}