0

我正在寻找一种方法来解析包含嵌套记录的平面文件。作为一个例子,我有一个文件包含一行

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
}

我希望 Camel 数据格式之一支持这一点。但我似乎无法找到哪个会?

4

2 回答 2

0

我猜骆驼为此做出了优雅的决定

首先,将您的 POJO 类定义为 CSV 绑定

@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("\\|"));
  }
}

然后你可以像这样在解组中使用它

<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>
于 2018-02-25T13:09:17.453 回答
0

您可能会为那些接受 String 参数的多值添加一个 setter 到您的 POJO,然后在内部将其拆分为一个列表。

public void setAddress(String adr) {
  String[] parts = adr.split("|");
  ... // convert array to list and set it
}

然后您可以使用 beanio 等来映射以逗号分隔的字段。

于 2018-02-25T08:01:08.900 回答