java - Jackson CSVallowComments仅适用于多行消息?

标签 java csv jackson comments jackson-databind

示例 1(失败):

final String line = "# 134";  
CsvMapper mapper = mapperForCsv(); 
String[] it = mapper.readerFor(String[].class) 
       .with(mapper.schema().withComments()).readValue(line);

示例 2(成功):

final String line = "# 134";
CsvMapper mapper = mapperForCsv();
MappingIterator<String[]> its = mapper.readerFor(String[].class) 
       .with(mapper.schema().withComments()).readValues(line);

检查代码后,我发现 withComments 仅适用于多行消息。这是一个错误还是预期的?

最佳答案

当您创建 MappingIterator 对象时,您实际上还没有反序列化任何内容。您需要迭代所有行或使用 its.readAll() 方法来启动反序列化过程。

当您使用readValue方法时,您期望只有一个对象。如果不可用,则会抛出异常以通知您这是不可能的。它不能只是返回 null,因为这将是无提示故障,并且可能会在稍后导致 NPE

使用 MappingIterator 是一个不同的场景,因为您需要迭代它,并且 API 允许您检查下一个元素。因此,很明显,如果没有元素,我们就可以停止迭代。

所以,在我看来这不是一个错误。

关于java - Jackson CSVallowComments仅适用于多行消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58425365/

相关文章:

java - ByteBuffers 可以用作 'long living' 静态对象吗?

java - 为什么 rabbitmq 一直记录未知的交付标签 'basic.ack' ?

python - 按日期对 csv 列进行排序

java - 如何在 json 中仅显示 oneToMany 中实体的一个属性?

java - HttpRequestHandlingMessagingGateway JSON 数组有效负载

java - 如何从 Json Tree 获取特定节点而不迭代整个列表

java - 使用 Java 解析 <ul class ="news-list">

java - Java中负数相减的问题

python - 如何将数据作为字符串(不是文件)写入 CSV 格式?

python - 用逗号和 - 作为分隔符循环 python