我試圖看看,如果這甚至可能與SuperCSV和Dozer,或者如果我應該恢復到地圖解析。我有一個POJO,它有一個Map的成員字段。值得慶幸的是,在CSV解析期間,我知道應該創建什麼特定的MyInterface子類,並且MyEnum的值也是靜態的。但是,我將如何在列映射中設置所有這些?謝謝!帶有枚舉和子類的SuperCSV Dozer深度映射圖?
目前,我的單元處理器有這種結構,我使用的是CsvMapReader。
private static final CellProcessor[] CELL_PROCESSORS = new CellProcessor[] {
new NotNull(new Trim(new StrRegEx("^\\d{10,}$"))), // phone1
new Optional(new Trim(new StrRegEx("^\\d{10,}$"))), // phone2
new Optional(new Trim(new StrRegEx("^\\d{10,}$"))), // phone3
new Optional(new Trim()), // callVar1
new Optional(new Trim()), // callVar2
new Optional(new Trim()), // callVar3
new Optional(new Trim()), // callVar4
new Optional(new Trim()), // callVar5
new Optional(new Trim()), // callVar6
new Optional(new Trim()), // callVar7
new Optional(new Trim()), // callVar8
new Optional(new Trim()), // callVar9
new Optional(new Trim()), // callVar10
};
private Contact mapRowToContact(Map<String, Object> row) {
Contact contact = new Contact();
MyPhoneContactMethodData methodData = new MyPhoneContactMethodData();
List<Phone> phones = new ArrayList<>();
Phone phone = new Phone();
phone.setPhoneNumber((String)row.get("phone1"));
phones.add(phone);
phone = new Phone();
phone.setPhoneNumber((String)row.get("phone2"));
if (phone.getPhoneNumber() != null) {
phones.add(phone);
}
phone = new Phone();
phone.setPhoneNumber((String)row.get("phone3"));
if (phone.getPhoneNumber() != null) {
phones.add(phone);
}
methodData.setPhones(phones);
List<String> callVars = new ArrayList<>();
callVars.add((String)row.get("callVar1"));
callVars.add((String)row.get("callVar2"));
callVars.add((String)row.get("callVar3"));
callVars.add((String)row.get("callVar4"));
callVars.add((String)row.get("callVar5"));
callVars.add((String)row.get("callVar6"));
callVars.add((String)row.get("callVar7"));
callVars.add((String)row.get("callVar8"));
callVars.add((String)row.get("callVar9"));
callVars.add((String)row.get("callVar10"));
methodData.setEnterpriseCallVarData(callVars);
Map<ContactMethod, ContactMethodData> methodDataMap = new HashMap<>();
methodDataMap.put(ContactMethod.PHONE, methodData);
contact.setContactMethodData(methodDataMap);
return contact;
}
甲Contact
具有這種結構,與許多其他不相關的領域:
public class Contact {
private Integer id;
private Map<ContactMethod, ContactMethodData> contactMethodData;
}
ContactMethod
是一個枚舉,帶有值PHONE
和EMAIL
。 ContactMethodData
是一個接口,其中MyPhoneContactMethodData
的超類實現了該接口。
你可以發佈一些示例代碼?我是一名超級CSV開發者 - 我可以提供幫助,但前提是我明白問題所在! :) – 2013-02-14 22:24:47