首页 > 解决方案 > jackson CSV allowComments 仅适用于多行消息?

问题描述

示例 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 仅适用于多行消息。这是错误还是预期?

标签: javacsvjacksoncommentsjackson-databind

解决方案


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

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

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

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


推荐阅读