骆驼 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...})")
我有一个包含一组用户的大型 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...})")