骆驼 CSV 转换为 Java 对象

Camel CSV Transformation to Java Object

我有一个包含一组用户的大型 CSV 文件。我正在寻找一种简单的方法来读取文件、映射到 Java 对象并将该对象传递给将对该对象执行某些操作的处理器。 所以我用表示 CSV 文件的注释标记了一个 Java bean:

@CsvRecord(separator = ",")
public class User {
    @DataField(pos = 1)
    private String username;
    @DataField(pos = 2)
    private String group;

}

然后我开始编写 Camel Route 代码,但是我找不到如何将 CSV 作为 Java 对象传递到端点:

CamelContext context = new DefaultCamelContext();
    final DataFormat bindy = new BindyCsvDataFormat("com.sample.model");
    context.addRoutes(new RouteBuilder() {
        public void configure() {
            from("file:/usr/camel/in?noop=true").
            unmarshal(bindy)
            .to("??????");
        }
}); 

目标端点应该是 java class 接收用户对象。有可能这样做吗?谢谢

您可以使用 Processor 的实例来处理 POJO:

    Processor myProcessor = new Processor() {
        @Override
        public void process(Exchange exchange) throws Exception {
            // do something here
        }
    };

    from("file:/usr/camel/in?noop=true")
    .unmarshal(bindy)
    .process(myProcessor);

方案二:可以用bean。首先,添加这个 "bean" class:

public class MyBean {
    public void process(List<String> list) {
        System.out.println("list contains " + list.size() + " elements.");
    }
}

现在,Camel Bean Binding 在交换中获取 "In" 主体并将其作为参数提供给您的 bean(避免整个 exchange.getIn().getBody() 部分)。

from("file:/usr/camel/in?noop=true")
.unmarshal(bindy)
.bean(new MyBean())

如果您想对 bean 使用不同的参数,可以使用带有 simple 表达式的方法调用,如下所示:

.bean(new MyBean(), "process(${body.get(0).etc...})")