如果 bean 列表为空,OpenCSV 不会写入标头

Jey*_*350 7 java opencsv

当使用带注释的 opencsv 和 StatefulBeanToCsv 时,当 bean 列表为空时,不会写入标头。我认为这个测试会成功,但事实并非如此。

private class bean1 {
    @CsvBindByName(column = "column1")
    private String col1;

    public String getCol1() {
        return col1;
    }

    public void setCol1(String col1) {
        this.col1 = col1;
    }
}

@Test
public void testOpenCsvEmptyBeanList() throws CsvException {
    StringWriter sw = new StringWriter();
    
    StatefulBeanToCsv<bean1> sbc = new StatefulBeanToCsvBuilder<bean1>(sw)
            .withLineEnd(CSVWriter.DEFAULT_LINE_END)
            .build();
    
    // empty bean list
    sbc.write(new ArrayList<>());
    
    assertEquals("column1" + CSVWriter.DEFAULT_LINE_END, sw.toString());
}
Run Code Online (Sandbox Code Playgroud)

有什么想法可以让这个测试有效吗?

nyg*_*nyg 0

我真的怀疑这是否可能。查看 的代码StatefulBeanToCsv,如果列表为空,则不会写入任何内容。

public void write(List<T> beans) throws CsvDataTypeMismatchException, CsvRequiredFieldEmptyException {
    if (CollectionUtils.isNotEmpty(beans)) {
        write(beans.iterator());
    }
}
Run Code Online (Sandbox Code Playgroud)