我正在寻找一种包含嵌套记录的平面文件的方法。例如,我有文件containig a Line
NAME,SURNAME,ADRESSLINE1|ADDRESSLINE2|ADDRESLINE3,PHONE1|PHONE2
最后,我希望它能映射到Pojo
class Record {
String name;//NAME
String surname;//SURNAME
List<String> address;//three elements
List<String> phone;//two elements
}
我的希望是,骆驼dataformats之一支持这一点。但是我似乎找不到哪一个?
您可能可以在POJO中为那些采用字符串参数的多值添加一个setter,然后将其内部分配到列表中。
public void setAddress(String adr) {
String[] parts = adr.split("|");
... // convert array to list and set it
}
然后,您可以使用beanio等来映射逗号分隔的字段。
我想骆驼有优雅的决定
首先,将您的pojo类定义为csv bindy
@CsvRecord(separator = ",", crlf = "UNIX")
public class Person {
@DataField(pos = 1)
private String name;
@DataField(pos = 2)
private String surname;
@DataField(pos = 3)
private String addresses;
@DataField(pos = 4)
private String phones;
public String getName() {
return name;
}
public String getSurname() {
return surname;
}
public List<String> getAddress() {
return Arrays.asList(addresses.split("\|"));
}
public List<String> getPhones() {
return Arrays.asList(phones.split("\|"));
}
}
然后,您可以像这样的umarshalling中使用它
<camelContext id="camel" trace="true" xmlns="http://camel.apache.org/schema/spring">
<dataFormats>
<bindy id="bindyDataformat" type="Csv" classType="test.Person"/>
</dataFormats>
<route>
<from uri="file:src/data?noop=true"/>
<unmarshal ref="bindyDataformat"/>
<split>
<simple>body</simple>
<to uri="mock:queue.csv"/>
</split>
</route>
</camelContext>