@SaF98

Как реализовать композицию в OpenCSV?

Здравствуйте, есть два бина:
public class Person {
    private long id;
    private String name;
// getter setter
}
public class Job {
    private long id;
    private Person person;
// getter setter
}


В документации приводится пример в котором вложенный бин представляется как список:

public class Person {
    @CsvBindByPosition(position = 0)
    private long id;
    @CsvBindByPosition(position = 1)
    private String name;
// getter setter
}
public class Job {
    @CsvBindByPosition(position = 0)
    private long id;
    @CsvBindAndSplitByPosition(position = 1, converter = TextToPerson.class, elementType = Person.class)
    private List<Person> person;
// getter setter
}


класс конвертер
public class TextToPerson extends AbstractCsvConverter {

    @Override
    public Object convertToRead(String s) throws CsvDataTypeMismatchException, CsvConstraintViolationException {
        Person person = new Person();
        DataProviderCSV csv = new DataProviderCSV();
        csv.getPersonById(Long.parseLong(s)).forEach(p->{
            person.setId(p.getId());
            person.setName(p.getName());
        });
        return person;
    }
    @Override
    public String convertToWrite(Object value) throws CsvDataTypeMismatchException {
        Person person = (Person) value;
        return String.valueOf(person.getId());
    }
}


Идея такова что при записи в качестве вложенного бина записывался id, а при чтении брались данные с другой таблицы.
При этом, convertToWrite работает, но:
1) Не работает convertToRead(), для чтения использую CsvToBeanBuilder().withType(clazz)?
2) Как можно использовать Person вместо List в бине Job?
  • Вопрос задан
  • 211 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы