首页 > 解决方案 > Opencsv使用ColumnPositionMapping写入字符串列表

问题描述

我有下面的代码

public class Carrier extends BaseDBClass{
@CsvBindByName
private String name;
@CsvRecurse
private CarrierType carrierType;
@CsvRecurse
private LocationAddress address;
@CsvBindAndSplitByName(elementType = String.class, writeDelimiter = ",")
private List<String> phoneNumbers;
}

List<Carrier> carriers = getAll();

    PrintWriter writer = response.getWriter();

    ColumnPositionMappingStrategy<Carrier> mappingStrategy = new ColumnPositionMappingStrategy<>();

    mappingStrategy.setType(Carrier.class);
    String[] columns=new String[]{"id","name","description","carrierType", "country","city", "street", "streetNumber", "postalCode", "phoneNumbers", "createdAt", "modifiedAt"};
    mappingStrategy.setColumnMapping(columns);

    response.getWriter().write(String.join(",", Arrays.stream(columns).map(column->"\""+column+"\"").toArray(String[]::new))+"\n");


    StatefulBeanToCsv<Carrier> beanWriter = new StatefulBeanToCsvBuilder<Carrier>(writer)
            .withSeparator(CSVWriter.DEFAULT_SEPARATOR)
            .withMappingStrategy(mappingStrategy)
            .build();
    beanWriter.write(carriers);
    response.getWriter().close();

问题是它只写了 1 个电话号码,而不是用逗号分隔的列表。我已经在没有 ColumnPositionMapping 的情况下尝试过它并且它可以工作,但我想指定自定义标题名称和自定义列位置!

标签: spring-bootopencsv

解决方案


推荐阅读