Сопоставление столбца CSV с классом POJO при использовании Super CSV

#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, но я думал, что это должно сработать. Мне жаль, что я прокомментировал это, прежде чем на самом деле убедиться, сработает это или нет. Это была первая мысль, пришедшая после прочтения вашего вопроса. Я буду искать другие решения и свяжусь с вами, если найду что-нибудь жесткое. Спасибо за понимание. 🙂