EasyExcel 导出排除基类字段,不给基类加@ExcelIgnore 的方式。

在使用 EasyExcel 进行数据导出时,如果实体类继承了包含审计字段(如 createBycreateTimeupdateTime 等)的基类,这些字段会默认被导出

假设你有如下基类:

java 复制代码
public class BaseEntity {
    private String createBy;
    private LocalDateTime createTime;
    private String updateBy;
    private LocalDateTime updateTime;
    // getter/setter...
}

业务实体继承它:

java 复制代码
public class UserDTO extends BaseEntity {
    private String name;
    private String email;
    // ...
}

常见的做法

给基类字段加 @ExcelIgnore

给基类加上@ExcelIgnore可以解决这个问题,或者增加excel相关的pojo类,但我不想这么做。侵入性强:污染了通用基类

手动硬编码排除字段

比如

java 复制代码
Set<String> exclude = Set.of("createBy", "createTime", "updateBy", "updateTime");
EasyExcel.write(...).excludeColumnFieldNames(exclude).doWrite(list);

我的解决方式:反射动态获取基类字段,自动排除

java 复制代码
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.Set;
import java.util.stream.Collectors;

public class ExcelExportUtils {

    /**
     * 获取指定类的所有字段名称(自动用于排除)
     * @param classes 要排除的类,例如 BaseEntity.class
     * @return 字段名称集合
     */
    public static Set<String> getExcludeFieldNames(Class<?>... classes) {
        return Arrays.stream(classes)
                .flatMap(clazz -> Arrays.stream(clazz.getDeclaredFields()))
                .map(Field::getName)
                .collect(Collectors.toSet());
    }
}

使用方式:

在导出逻辑中使用:

java 复制代码
// 查询数据
List<UserDTO> list = userService.queryExportData();

// 自动获取基类字段并排除
Set<String> excludeFields = ExcelExportUtils.getExcludeFieldNames(BaseEntity.class);

// 导出
EasyExcel.write(response.getOutputStream(), UserDTO.class)
        .excludeColumnFieldNames(excludeFields)
        .sheet("用户列表")
        .doWrite(list);
相关推荐
阿里嘎多学长20 小时前
2026-04-30 GitHub 热点项目精选
开发语言·程序员·github·代码托管
abcnull1 天前
用javaparser做精准测试
java·ast·静态代码分析·精准测试·javaparser
叶小鸡1 天前
Java 篇-项目实战-苍穹外卖-笔记汇总
java·开发语言·笔记
AI人工智能+电脑小能手1 天前
【大白话说Java面试题】【Java基础篇】第22题:HashMap 和 HashSet 有哪些区别
java·开发语言·哈希算法·散列表·hash
juniperhan1 天前
Flink 系列第21篇:Flink SQL 函数与 UDF 全解读:类型推导、开发要点与 Module 扩展
java·大数据·数据仓库·分布式·sql·flink
ID_180079054731 天前
Python 实现亚马逊商品详情 API 数据准确性校验(极简可用 + JSON 参考)
java·python·json
c++之路1 天前
C++23概述
java·c++·c++23
时空系1 天前
第10篇:继承扩展——面向对象编程进阶 python中文编程
开发语言·python·ai编程
专注API从业者1 天前
Open Claw 京东商品监控选品实战:一键抓取、实时监控、高效选品
java·服务器·数据库
CHANG_THE_WORLD1 天前
python 批量终止进程exe
开发语言·python