您现在的位置是:网站首页 > 代码编程 > JAVA开发JAVA开发
【原】记一次EasyExcel读取xlsx文件实体bean数据全部为null的问题
不忘初心 2022-06-04 围观() 评论() 点赞() 【JAVA开发】
简介:很早之前使用过一次EasyExcel,换到新公司之后,由于公司自己封装的有Excel工具类,所以就很久没有用过EasyExcel了,最近公司重构底层基础框架,我推荐引入了EasyExcel,本想着给同事秀一波技能,结果没想到分分钟打脸。如山图所示,在使用EasyExcel读取xlsx文件之后,使用index索引对应的方式来映射实体bean,却拿到了一个空对象,里面的字段全部为null,这可真是太操
很早之前使用过一次EasyExcel,换到新公司之后,由于公司自己封装的有Excel工具类,所以就很久没有用过EasyExcel了,最近公司重构底层基础框架,我推荐引入了EasyExcel,本想着给同事秀一波技能,结果没想到分分钟打脸。
如山图所示,在使用EasyExcel读取xlsx文件之后,使用index索引对应的方式来映射实体bean,却拿到了一个空对象,里面的字段全部为null,这可真是太操蛋了。
以为自己代码哪里写错了,跑去检查了一下之前的代码,发现并没有哪里写错了,读取方式,以及listener都一样,唯一不同的地方就在于,之前的项目中接收入参的java对象没有使用lombok,而这次使用了lombok。
以前的代码
package com.gude.reservoir.dto.excel;
import com.alibaba.excel.annotation.ExcelProperty;
/**
* 用户导入Excel入参
* Created by SongFei on 2020/5/30.
*/
public class UserImportDTO {
@ExcelProperty(index = 0)
private String nickName;
@ExcelProperty(index = 1)
private String userName;
@ExcelProperty(index = 2)
private String passWord;
@ExcelProperty(index = 3)
private String phone;
@ExcelProperty(index = 4)
private String idcard;
@ExcelProperty(index = 5)
private String status;
@ExcelProperty(index = 6)
private String userType;
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getIdcard() {
return idcard;
}
public void setIdcard(String idcard) {
this.idcard = idcard;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getUserType() {
return userType;
}
public void setUserType(String userType) {
this.userType = userType;
}
}
现在的代码
package com.gude.reservoir.dto.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* 坐标表导入Excel入参
* Created by SongFei on 2022/5/30.
*/
@Data
@EqualsAndHashCode()
@Accessors(chain = true)
public class CoordinateImportDTO {
/**
* 编号
*/
@ExcelProperty(index = 0)
private String num;
/**
* X值
*/
@ExcelProperty(index = 1)
private String x;
/**
* Y值
*/
@ExcelProperty(index = 2)
private String y;
}
我抱着怀疑的态度,将现在的代码中的lombok去掉了,结果就能读取到数据了,WTF。
难道真的就鱼和熊掌不可兼得?
项目中对于lombok的依赖,明显要高于EasyExcel,所以不可能去掉lombok的,但我又想留下EasyExcel,毕竟这东西用来导入Excel文件确实方便很多,能极大地提高开发效率,所以我就继续测试,想让二者兼容一下。
@Data
@EqualsAndHashCode()
@Accessors(chain = true)
大家可以看到,我使用了这3个注解,我逐个测试之后,发现问题出在最后一个注解上,也就是这个@Accessors
注解有问题,我将它移除掉之后,就可以正常将读取到的值映射到实体bean上去了。
这个@Accessors
注解允许我们在set属性的时候使用链式写法,以前用的不多,但是用过之后就经常喜欢带上它,没想到这一次就翻车了。
public static void main(String[] args) {
// 链式写法,将set方法的返回值从void改为了this,从而指向这个对象本身
CoordinateImportDTO dto = new CoordinateImportDTO().setNum("1").setX("1").setY("1");
System.out.println(dto);
}
翻阅了一下各种文档,就说是EasyExcel与@Accessors
不兼容,但是官网竟然么有对此做出解释,一个字,绝!
看完文章,有任何疑问,请加入群聊一起交流!!!
很赞哦! ()
相关文章
标签云
猜你喜欢
- IntelliJ IDEA 2019.2已经可以利用补丁永久破解激活了
- IntelliJ IDEA 2019.3利用补丁永久破解激活教程
- IntelliJ IDEA高版本最灵活的永久破解激活方法(含插件激活,时长你说了算)
- Jetbrains全家桶基于ja-netfilter的最新破解激活详细图文教程
- IntelliJ IDEA 2022.1永久破解激活教程(亲测可用,持续更新)
- 分享几个正版 IntelliJ IDEA 激活码(破解码、注册码),亲测可用,持续更新
- ja-netfilter到底需不需要mymap,2021.3.2版本激活失效?
- 如何激活idea2022.1及以上版本中的插件(亲测可用)
- 【史上最全】IntelliJ IDEA最新2022.1版本安装和激活视频教学(含插件)
- IntelliJ IDEA 2022.2 版本最新2099年永久激活方法,亲测可用,也可以开启新UI了。
站点信息
- 网站程序:spring + freemarker
- 主题模板:《今夕何夕》
- 文章统计:篇文章
- 标签管理:标签云
- 微信公众号:扫描二维码,关注我们