1.产生场景
我做完导出功能功能以后,在做导入功能时,发现了问题:
目前读取到的所有的数据都是null 但是总记录数是正确的,但是就是每一个属性都没有赋值成功
2.排查原因
2.1 接收类的数据不对
如果你接收类的属性 和 你的表格对应不上的话也可能导致部分数据会赋值失败,但是对于我的情况显然不是
a.我的导出和导入都是用的同一个类 显然不会存在什么属性不对
b.就算不是使用的同一个类,也只会导致部分属性赋值失败,不会所有数据都是null
2.2 读取文件错误
有可能是你读取的文件就不对,导致对应的类就是错误的,自然所有的赋值都不对
经过测试,我发现我的情况也不是这种
2.3 赋值注解有问题
如果不是读取文件和类不正确 那就是出现在整体的赋值上面了
我们一般是使用的@Data 去节省掉最基础的get和set操作,那么所有的属性都赋值失败,问题可能就出现这个上面了
3.解决办法
package com.example.easyExcel.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
public class MenuDTO implements Serializable {
@ExcelProperty(value = "菜单编码")
private String menuCode;
@ExcelProperty(value = "父菜单编码")
private String menuParentCode;
@ExcelProperty(value = "菜单名称")
private String menuName;
@ExcelProperty(value = "类型")
private Integer menuType;
@ExcelProperty(value = "菜单图标")
private String icon;
@ExcelProperty(value = "菜单参数")
private String menuParams;
@ExcelProperty(value = "排序")
private Integer sort;
@ExcelProperty(value = "子系统编码")
private String subCode;
@ExcelProperty(value = "子系统名称")
private String subName;
@ExcelProperty(value = "子系统路径")
private String subUrl;
@ExcelProperty(value = "模块编码")
private String moduleCode;
@ExcelProperty(value = "模块名称")
private String moduleName;
@ExcelProperty(value = "页面编码")
private String pageCode;
@ExcelProperty(value = "页面名称")
private String pageName;
@ExcelProperty(value = "页面URL")
private String pageUrl;
@ExcelProperty(value = "项目URL")
private String pageProjectUrl;
@ExcelProperty(value = "页面描述")
private String pageDescription;
@ExcelProperty(value = "页面图标")
private String pageIcon;
@ExcelProperty(value = "默认参数")
private String pageDefaultParams;
}
3.1 去掉@Data 手写get 和 set
当我锁定问题以后,发现我就只有一个@Data尝试 去除@Data这个注解 手写get和set 发现手写get 和 set 之后能够正常赋值,
3.2 查找拦截器或者全局配置
只有一个@Data ,问题肯定不是出在这个上面,需要查看到你的项目中是否配置了什么拦截器,全局配置什么之类的,经过我的查找:
我发现在我的项目中有一个lombok.config 里面配置了属性 lombok.accessors.chain=true这便是问题的根本,我们需要在 我们的接收类中去关闭掉这个注解就可以赋值成功了:
我们可以看到现在可以赋值成功:
问题成功解决;
希望可以帮助到大家,这是我在工作中出现的一些问题,未来持续更新