本文介绍如何借助 super csv 库,将 csv 文件中的记录(如员工信息)动态映射为运行时传入类名所对应的 java 对象实例,支持字段名自动绑定、类型安全转换与批量处理。
在基于 Spring Boot 或其他 Java Web 框架开发文件导入接口时,常需接收上传的 CSV 文件,并将其解析为业务实体(如 Employee)后持久化到数据库。此时若仅依赖 Apache Commons CSV,它仅提供原始 CSVRecord(类似 Map
Super CSV 是更优解:它内置 CsvBeanReader,可依据 CSV 表头(header)与 Java Bean 的字段名(或自定义注解)自动完成类型转换与属性赋值,且支持泛型动态解析。
添加依赖(Maven):
net.sf.supercsv super-csv2.4.0
定义目标 Bean(以 Employee 为例):
public class Employee {
private Long id;
private String firstName;
private String lastName;
// 必须提供无参构造器
public Employee() {}
// getter/setter 省略(IDE 自动生成即可)
}⚠️ 注意:Super CSV 要求 Bean 具备无参构造器,且字段名(或 @CsvColumn 注解值)必须与 CSV 表头严格一致(忽略大小写默认不敏感,但建议保持统一)。
以下代码演示如何根据前端传入的 className(如 "com.example.Employee")动态加载类并完成 CSV 映射:
import org.supercsv.io.CsvBeanReader; import org.supercsv.prefs.CsvPreference; import java.io.FileReader; import java.util.ArrayList; import java.util.List; public List
调用示例:
Listemployees = parseCsvToBeans("/tmp/employees.csv", "com.example.Employee"); // 返回 List ,可直接批量入库 employees.forEach(System.out::println);
w ParseLong() 处理 id,new Optional(new StrMinMax(1, 50)) 校验 firstName 长度),避免 NumberFormatException。综上,Super CSV 的 CsvBeanReader 是实现 CSV → 动态 Bean 映射的成熟、简洁、可扩展方案,特别适合需支持多类型导入的通用接口场景。