Джексон CSV allowComments работает только для многострочного сообщения? - PullRequest
1 голос
/ 17 октября 2019

Пример 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 работает только с многострочным сообщением. Это ошибка или ожидается?

1 Ответ

1 голос
/ 17 октября 2019

Когда вы создаете MappingIterator объект, вы на самом деле еще ничего не десериализируете. Вам нужно перебрать все строки или использовать метод its.readAll() для запуска процесса десериализации.

Когда вы используете метод readValue, вы ожидаете ровно один объект. Если это не доступно, исключение выдается, чтобы сообщить Вам, что это не возможно. Он не может просто вернуть null, потому что это будет тихий сбой и может вызвать NPE позже.

С MappingIterator это другой сценарий, потому что вам нужно перебрать его, а API позволяетвам проверить следующий элемент. Итак, ясно, что если нет элементов, мы можем просто прекратить итерации.

Так что, на мой взгляд, это не ошибка.

...