SuperCSV — анализ нескольких столбцов в список

Учитывая следующий пример данных csv

name,address,sibling,sibling,sibling John,MainSt,Sarah,Mike,Greg

и пример POJO, в который я хочу разобрать данные

public class Employee {
   private String name;
   private String address;
   private List<String> siblings;

   public Employee() { }  

   public void setName(String name) { ... }
   public void setAddress(String address { ... }
   public void setSiblings(List<String> siblings) { ... }
}

и следующее сопоставление полей

String[] fieldMapping = new String[]{
    "name",
    "address",
    "siblings[0]",
    "siblings[1]",
    "siblings[2]"
}

и следующие сотовые процессоры

CellProcessors[] processors = new CellProcessors[]{
    new NotNull(),    // name
    new NotNull(),    // address
    new NotNull(),    // siblings[0]
    new NotNull(),    // siblings[1]
    new NotNull()     // siblings[2]
}

Я ожидаю, что смогу без проблем разобрать данные csv в Employee, однако я получаю следующее исключение

org.supercsv.exception.SuperCsvReflectionException: unable to find method setSiblings[0](java.lang.String) in class com.Employee - check that the corresponding nameMapping element matches the field name in the bean, and the cell processor returns a type compatible with the field

Вот как я делаю фактический разбор

List<Employee> deserializedRecords = new ArrayList<>();
try (ICsvBeanReader beanReader = new CsvBeanReader(new FileReader(file), CsvPreferences.STANDARD_PREFERENCE)) {
    beanReader.getHeader(true);
    Employee model;
    while ((model = (Employee) beanReader.read(Employee.class, fieldMapping, processors)) != null) {
        deserializedRecords.add(model);
    }
}

Это в значительной степени соответствует ответу, данному 21161854">здесь, и после прочтения документации SuperCSV я не совсем понимаю, почему возникает исключение.


person Cooper    schedule 12.09.2014    source источник


Ответы (1)


Вы используете CsvBeanReader, который не поддерживает индексированное (или глубокое) сопоставление. Вы ищете CsvDozerBeanReader (примеры здесь).

person James Bassett    schedule 12.09.2014