【问题标题】:OpenCSV: Mapping a Nested Bean to a CSV fileOpenCSV:将嵌套 Bean 映射到 CSV 文件
【发布时间】:2025-12-11 02:20:39
【问题描述】:

我正在尝试将 bean 映射到 CSV 文件,但问题是我的 bean 具有其他嵌套 bean 作为属性。发生的情况是,OpenCSV 通过属性找到一个 bean,然后进入它并映射该 bean 内的所有数据,如果它找到另一个 bean,它就会继续下去。如何使用 OpenCSV 处理嵌套 bean?如何确保它映射嵌套 bean 的正确属性?

【问题讨论】:

  • 你的问题是在写嵌套bean还是在读嵌套bean?如果阅读,请参阅this answer

标签: java spring javabeans opencsv


【解决方案1】:

在 OpenCSV 5.0 中,我们可以通过 @CsvRecurse 注释映射嵌套 bean,而无需使用 MappingStrategy。

能够将映射从输入/输出列拆分到成员 多个嵌入式 bean 的变量已通过 注释@CsvRecurse。一个根 bean 仍然是必要的。

CSV 文件

id,cardNumber,holder
1,1234567 890,abc

根豆

public class DataSet {

    @CsvBindByName
    private String id;

    @CsvRecurse
    private MyNumber myNumber;

    //getter and setter
}

嵌套豆

public class MyNumber {

    @CsvBindByName
    private String cardNumber;

    @CsvBindByName
    private String holder;

    // getter and setter
}

读书豆

  public static void main(String[] args) throws IOException {
        BufferedReader reader = Files.newBufferedReader(Paths.get("path-to-csv-file.csv"));
        List<DataSet> beans = new CsvToBeanBuilder<DataSet>(reader).withType(DataSet.class).build().parse();
    }

参考:http://opencsv.sourceforge.net/#multivaluedmap_based_bean_fields_many_to_one_mappings

【讨论】:

  • 谢谢,这正是我想要的!还发现 SuperCSV 使用 Dozer 支持它。