利用easyExcel读取excel表格时,发现能正确读取到总记录数,但是每一条记录都是全为null

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这便是问题的根本,我们需要在 我们的接收类中去关闭掉这个注解就可以赋值成功了:

我们可以看到现在可以赋值成功:

问题成功解决;

希望可以帮助到大家,这是我在工作中出现的一些问题,未来持续更新

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值