#java #csv #annotations #supercsv
Вопрос:
Мне нужно сопоставить имя столбца CSV с классом POJO в JAVA. Но имена в CSV-файлах и классах Java немного отличаются. Кроме того, мне не нужно, чтобы все столбцы в CSV-файлах были сопоставлены с POJOs, мне нужны только определенные столбцы. Попробовал сопоставить с помощью имени столбца.
Но приведенная ниже реализация работает только в том случае, если имена столбцов CSV и имена полей класса POJO совпадают.
Я использую Супер CSV для своей реализации. Любые аннотации/способы обработки этого [разные имена в полях POJO / столбцах CSV], я действительно застрял здесь.
Код:
ICsvBeanReader beanReader = null;
Employee employee;
//columns to be mapped
final List<String> columnsToMap = Arrays.asList("emp_id_no", "emp_name", "emp_dept");
HashMap<String, Object> employeeMap;
try {
beanReader = new CsvBeanReader(new InputStreamReader(inputStream, "UTF-8"),
new CsvPreference.Builder(CsvPreference.STANDARD_PREFERENCE).build());
// read the CSV header (and set any unwanted columns to null)
String[] header = beanReader.getHeader(true);
for (int i = 0; i < header.length; i ) {
if (!columnsToMap.contains(header[i])) {
header[i] = null;
}
}
for (String s: header) {
System.out.println(s);
}
employeeMap = new HashMap<String, Object>();
while ((employee = beanReader.read(Employee.class, header)) != null) {
System.out.println(employee);
}
}
csv:
emp_id,emp_name,emp_phone_no,emp_dept,emp_address_details
1,"abc","finance",123,"hgdhgede"
2,"def","hr",456,"dwnhffjefnv"
ПОЖО будет:
public class Employee {
@Getter
@Setter
private int empId;
@Getter
@Setter
private String empName;
@Getter
@Setter
private String empDept;
}
Комментарии:
1. Вы пробовали аннотацию @SerializedName(«имя столбца»)?
2. Нет, дай мне попробовать сейчас
3. но @VikasChoudhary, мы можем использовать приведенные выше аннотации только для материалов, связанных с JSON, правильно
4. это не работает, Вика, нужно проверить некоторые другие способы. Спасибо!
5. Да, это связано с JSON, но я думал, что это должно сработать. Мне жаль, что я прокомментировал это, прежде чем на самом деле убедиться, сработает это или нет. Это была первая мысль, пришедшая после прочтения вашего вопроса. Я буду искать другие решения и свяжусь с вами, если найду что-нибудь жесткое. Спасибо за понимание. 🙂