- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用opencsv创建 CsvToBean
像这样:
CsvToBean<AccountBean> csvToBean = new CsvToBeanBuilder<AccountBean>(new InputStreamReader(inputStream))
.withFieldAsNull(CSVReaderNullFieldIndicator.NEITHER)
.withType(AccountBean.class)
.build();
这是我的 AccountBean
:
public class AccountBean extends BeanBase<Account>
{
@CsvBindByName(column = "Id", required = true)
public String salesforceId;
@CsvBindByName(column = "OwnerId", required = true)
public String ownerId;
@CsvBindByName(column = "Name", required = true)
public String name;
// billing address
@CsvBindByName(column = "BillingStreet")
String billingStreet;
@CsvBindByName(column = "BillingCity")
String billingCity;
@CsvBindByName(column = "BillingState")
String billingState;
@CsvBindByName(column = "BillingPostalCode")
String billingPostcode;
@CsvBindByName(column = "BillingCountry")
String billingCountry;
}
问题在于地址字段 - 如果有空白字段,则它们始终为空,无论 CSVReaderNullFieldIndicator
是哪个我传递给 .withFieldAsNull()
的值.
我的 csv 文件有双引号来表示空字段,因此使用 CSVReaderNullFieldIndicator.NEITHER (无论如何都是默认值)应该生成一个空字符串。
这会导致问题,因为我将空值保存到数据存储区,然后又导致 NullPointerExceptions。
我做错了什么吗?
最佳答案
我正在尝试你的方法,并且我有同样的行为。由于这个库是开源的,我正在挖掘它发生的原因。
CsvToBean
类(class)你有一个CSVReader
负责访问要读取的数据。CSVReader
您有一个 CSVParser,它负责获取单个字符串并根据分隔符、引号和转义字符将其解析为元素。CSVParser
包含 CSVReaderNullFieldIndicator
的成员(枚举)用于告诉 CSVParser
什么可以视为 null。当您在代码中调用 build() 时 CsvToBean
, CSVReader
和CSVParser
根据您传递给 CsvToBeanBuilder
的信息进行实例化.
当您调用parse()
时CSVReader
将遍历您的 CSV 文件,并为每一行调用 CSVParser
。根据您的分隔符,解析器将返回一个字符串值数组。此时,基于 NullFieldIndicator 的 CSVParser 会考虑将字符串保留为空或将其设置为 null。最后,如果您的 NullFieldIndicator 属性为 NEITHER
例如,考虑的行是“one”;“”,则解析器返回的字符串数组将是 [one,""] 或 [one, null] if CSVReaderNullFieldIndicator
是 BOTH
或EMPTY_QUOTES
.
在此阶段之后,解析的行将映射到 AccountBean
字段。决定字段是否为空 StringUtils.isNotBlank()已使用。
结论:无论你传递给withFieldAsNull()什么,因为“”或null
被认为是 false
通过StringUtils.isNotBlank()
,因此该字段将为空。
您可以询问开发人员此行为是否是预期的行为。也许他有原因,或者只是一个错误。
关于java - OpenCSV - CsvReaderNullFieldIndicator 似乎没有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42856200/
我正在使用opencsv创建 CsvToBean像这样: CsvToBean csvToBean = new CsvToBeanBuilder(new InputStreamReader(inputS
我是一名优秀的程序员,十分优秀!