这与我所拥有的类似:
@CsvRecord(separator = "\\t", skipFirstLine = true)
public class Inventory {
@DataField(pos = 1, required=false)
private String vendor;
@DataField(pos = 2, required=false)
private String sku;
@DataField(pos = 3, required=false)
private Integer stock;
}
如果第 2 列或第 3 列为空,则根本没有问题,这些字段只有一个空值(假设 -> 是选项卡表示)。
VENDOR->SKU->STOCK
Vendor1->123->5
Vendor1->->10
具有绑定结果,例如
[{
vendor: "Vendor1",
sku: "123",
stock: 5
},
{
vendor: "Vendor1",
sku: null,
stock: 10
}]
到目前为止,一切都很好,但是当第一列为空时,binder 将第 2 列值(sku)分配给第 1 列绑定属性“vendor”,并将第 3 列值分配给第 2 列绑定属性( sku),绑定到第 3 列的实际属性保持为空:
VENDOR->SKU->STOCK
null->123->5
Vendor1->166->10
做这样的事情:
[{
vendor: "123",
sku: "5",
stock: null
},
{
vendor: "Vendor1",
sku: "166",
stock: 10
}]
我知道我总是可以让它“required=true”(这就是它最初的做法),但如果第二个不为空,它仍然不会失败,因为那个被分配给第一个;另一方面,在我们的例子中,做列要求为真,这不是一个好主意,因为因为一行丢失了一些东西,整个文件被拒绝,所以我们的策略是手动验证那些对我们来说是强制性的字段,所以我们可以正确记录并处理所有列中正确的行。
这是我对这个库的依赖:
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-bindy</artifactId>
<version>2.11.1</version>
</dependency>
这将是绑定库的名称:
camel-bindy-2.11.1.jar
我检查了 CsvRecord 注释和 DataField 注释中的所有属性,盲目地尝试了其中一些属性,希望能解决它。
有谁知道为什么会发生这种情况?或者如果它是在更高版本中解决的库问题?或者我可以尝试的任何建议?
当然,我提前感谢我能得到的任何帮助或答案!