具有划界记录的平面文件



我正在寻找一种包含嵌套记录的平面文件的方法。例如,我有文件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>

相关内容

  • 没有找到相关文章

最新更新