为了生成 CSV 文件的标题,我使用了 2 个类。一个FooHeader
与generateHeaderColumns = true
另一个Foo
与generateHeaderColumns = false
。由于 CSV 生成不是一次性的过程,因此使用Foo
withgenerateHeaderColumns = true
将不起作用,因为每次生成的标头都Foo
将被编组为 CSV。
下面的方法有效,但它确实是一个非常好的实现。特别是当它创建冗余代码时:和的实现FooHeader
是Foo
(并且必须)完全相同。
@Data
@ToString
@EqualsAndHashCode
@CsvRecord(separator = ";"
, skipFirstLine = true
, generateHeaderColumns = true
, quoting = true
, quote = "\"")
public class FooHeader {
@DataField(pos = 4, columnName = "First name")
private String person_first_name;
@DataField(pos = 5, columnName = "Last name")
private String person_name;
//..
}
@Data
@ToString
@EqualsAndHashCode
public class Foo {
@DataField(pos = 4)
private String first_name;
@DataField(pos = 5)
private String last_name;
//..
}
我正在寻找一种使用单个类而不是两个类的方法。该解决方案似乎围绕动态设置注释generateHeaderColumns
,@CsvRecord
例如在 bean 或处理器中。
在继续朝那个方向前进之前,我想知道其他人是否已经解决了同样的问题,或者直接使用 bindy(还没有找到使用 bindy 的方法)或使用其他方法。如果是这样,你是如何优雅地解决这个问题的?还是在运行时更改类注释值是更好的选择?