Я создаю класс загрузчика CSV, который читает записи из файлов CSV и возвращает List<T>
, где T - целевой класс POJO.
Образец CSV:
Из извлеченных записей из CSV можно получить значение 0
для поля Date
класса POJO. Из образца CSV запишите # 2, где значение createdDate
равно 0
. Как изменить 0
на действительную дату (например, 1970-01-01 09:00:00
), прежде чем произойдет фактическая десериализация?
Я успешно создал процесс чтения файла CSV для преобразования в возвращаемый List<T>
.
- Разбор:
org.apache.commons.csv
- Преобразование:
com.fasterxml.jackson.databind.ObjectMapper
Я имею в виду переопределение некоторых функций моего ObjectMapper
для манипулирования значениями, но я не знаю, как это сделать.
private List<T> convertToObjectList(List<Map<String, String>> csvRecordMapList, Class<T> targetClass) {
List<T> csvRecordObjList = new ArrayList<>();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setDateFormat(dateFormat);
objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
for(Map<String, String> recordMap : csvRecordMapList)
csvRecordObjList.add(objectMapper.convertValue(recordMap, targetClass));
return csvRecordObjList;
}
Если у меня есть 0
для поля Date
для целевого класса POJO, я получаю сообщение об ошибке ниже (что уже ожидается):
Can not construct instance of java.util.Date from String value '0': not a valid representation (error: Failed to parse Date value '0': Unparseable date: "0")