easyexcel导入读取数据后,实体类的字段全为null

本文探讨了在使用Lombok的@Accessors(chain=true)注解后,导致的问题及其解决过程。删除该注解后,对象操作恢复正常。重点在于理解链式访问的工作原理和其对代码的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

是由于加了lombok注解@Accessors(chain = true) 导致的,排查了好久,无意中删除这个注解就正常了。

@Accessors作用:
可以用链式访问,该注解设置为chain=true,生成setter方法返回this(也就是返回的是对象),代替了默认的返回void。

### EasyExcel 导入数据时的实体类设计与配置 在使用 EasyExcel 进行数据导入时,实体类的设计至关重要。实体类不仅需要映射 Excel 表格中的字段,还需要通过注解来定义字段的行为和约束。以下是一个完整的示例和相关说明。 #### 实体类设计 实体类通常用于映射 Excel 文件中的每一行数据。以下是实体类的关键点: 1. **`@ExcelProperty` 注解**:用于指定 Excel 列名或列索引与实体类属性之间的映射关系[^2]。 2. **`@ExcelIgnore` 注解**:如果某些字段不需要参与 Excel 的读写操作,可以使用该注解忽略这些字段。 3. **`@ExcelIgnoreUnannotated` 注解**:当类中许多字段都不参与 Excel 操作时,可以通过此注解忽略所有未标注 `@ExcelProperty` 的字段[^2]。 以下是一个典型的实体类示例: ```java import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.format.DateTimeFormat; import com.alibaba.excel.annotation.format.NumberFormat; import java.util.Date; public class ImportTestDatasReq { @ExcelProperty(value = "姓名", index = 0) private String name; @ExcelProperty(value = "年龄", index = 1) @NumberFormat("#") private Integer age; @ExcelProperty(value = "出生日期", index = 2) @DateTimeFormat("yyyy-MM-dd") private Date birthDate; @ExcelIgnore // 忽略该字段 private String remark; // Getters and Setters public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Date getBirthDate() { return birthDate; } public void setBirthDate(Date birthDate) { this.birthDate = birthDate; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } } ``` #### 控制器代码示例 在 Spring Boot 中,可以结合 `MultipartFile` 和 EasyExcel 提供的工具类完成数据导入功能。以下是一个控制器示例[^3]: ```java import com.alibaba.excel.EasyExcel; import com.alibaba.excel.read.listener.ReadListener; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.io.InputStream; import java.util.List; @RestController @RequestMapping("/excel") public class ExcelController { @PostMapping("/importTestDatas") public String importTestDatas(@RequestParam("multipartFile") MultipartFile multipartFile) throws IOException { if (multipartFile.isEmpty()) { return "文件为"; } InputStream inputStream = multipartFile.getInputStream(); List<ImportTestDatasReq> dataList = EasyExcel.read(inputStream) .head(ImportTestDatasReq.class) .sheet() .doReadSync(); // 处理导入的数据 dataList.forEach(System.out::println); return "导入成功"; } } ``` #### Maven 依赖配置 在项目中使用 EasyExcel,需要添加以下 Maven 依赖[^5]: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>最新版本号</version> </dependency> ``` 请确保将 `<version>` 替换为最新的版本号。 --- ### 注意事项 1. **字段映射**:确保实体类中的字段名称与 Excel 表头一致,或者通过 `@ExcelProperty` 注解指定正确的映射关系。 2. **数据校验**:可以在实体类中添加自定义校验逻辑,例如非检查、格式验证等。 3. **性能优化**:对于大文件导入,建议使用 `ReadListener` 接口处理数据流,避免一次性加载所有数据到内存中[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值