Accessors(chain = true) 注解会让easyexcel读取数据为null的原因

Accessors(chain = true) 是 Lombok 中一种实用的注解,可以为生成的 getter/setter 方法自动添加链式调用,提高代码的可读性和可维护性。

这个问题可能是因为 Accessors(cha

in = true) 注解导致的。使用该注解生成的 setter 方法返回的是当前对象,而不是 void 类型,这种方式在使用 BeanUtils 等工具类时可能会存在问题。EasyExcel 底层使用了 BeanUtils 来自动赋值,如果 setter 方法返回值类型不符合预期,就会导致 EasyExcel 读取数据为 null 的情况。

如果你有使用Accessors(chain = true)注解,可以尝试将生成的 setter 方法改为返回 void 类型来解决该问题。

我们可以使用 @Setter 注解代替@Accessors(chain = true)注解,来为数据对象的属性生成 setter 方法,但是不使用链式调用的方式。示例代码如下:

@Data
public class MyData {
    @ExcelProperty(value = "名称", index = 0)
    private String name;

    public void setName(String name) {
        this.name = name;
    }
}

同时,需要注意的是,如果属性名与 Excel 表头不一致,需要在注解中指定正确的属性值。由于 EasyExcel 底层使用的是反射机制来自动赋值,属性名不一致会导致数据无法正确绑定,从而导致读取数据为 null 的情况。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐