Здравствуйте, есть два бина:
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?