Opencsv проверка заголовка CSV с помощью заголовков бобов

#java #kotlin #opencsv

Вопрос:

У меня есть такой класс, как :

 data class BeanClass (
        @CsvBindByName(column = "Id")
        val id: Long = -1,
)
 

и используя это, чтобы преобразовать его в список идентификаторов

 val recommendationUpdateList = CSVUtils.convertToBean(file, BeanClass::class.java)
 

CSVUtils.convertToBean выглядит так :

 public static <T> List<T> convertToBean(File file, Class<T> bean) throws IOException {
        List<T> csvData = null;
        try (Reader reader = new FileReader(file)) {
            HeaderColumnNameMappingStrategy<T> strategy =
                    new HeaderColumnNameMappingStrategy<T>();
            strategy.setType(bean);
            CsvToBean<T> cb = new CsvToBeanBuilder<T>(reader)
                    .withType(bean)
                    .withFieldAsNull(CSVReaderNullFieldIndicator.BOTH)
                    .withMappingStrategy(strategy)
                    .build();
            csvData = cb.parse();
        }
        return csvData;
    }
 

Теперь, когда я загружаю такой CSV-файл, он работает нормально

 Id
2
 

ТЕМ не менее, я хочу, чтобы он выдавал ошибку, когда я использую следующий CSV (обратите внимание, что имя заголовка CSV изменилось)

 Kd
2
 

Пожалуйста, предложите способ, с помощью которого заголовок csv может быть проверен на соответствие заголовкам столбцов bean. В настоящее время он выбирает значение по умолчанию -1, также в моем случае использования я не могу проверить на основе значения по умолчанию.

Ответ №1:

Требуется ли добавление, выполняет ли работу:

 data class BeanClass (
    @CsvBindByName(column = "Id", required = true)
    val id: Long = -1
)
 

Это вызовет исключение csvrequireddemptyexception