我正在尝试使用 Camel 中的 Rest DSL 处理一个 csv 文件。
当我将 CSV 和 Marshall 拆分为 JSON 时,我遇到了一些奇怪的行为。这是我的代码:
@Component
public class
ProcessHandler extends RouteBuilder {
@Override
protected void defineRoute() throws Exception {
DataFormat csv = new BindyCsvDataFormat(CsvModel.class);
rest("/")
.post().produces("application/json")
.route()
.unmarshal(csv)
.split(body()).parallelProcessing().streaming()
.marshal().json(JsonLibrary.Gson)
.filter().jsonpath("$[?(@.counter==3)]")
.log("${body}")
但是我收到错误消息:Error during type conversion from type: java.lang.String to the required type: byte[] with value [CsvModel(....
但是,如果我按如下方式编辑路线:
@Component
public class
ProcessHandler extends RouteBuilder {
@Override
protected void defineRoute() throws Exception {
DataFormat csv = new BindyCsvDataFormat(CsvModel.class);
rest("/")
.post().produces("application/json")
.route()
.unmarshal(csv)
.marshal().json(JsonLibrary.Gson)
.split(body()).parallelProcessing().streaming()
//.filter().jsonpath("$[?(@.counter==3)]")
.log("${body}")
它工作正常。
然而,我显然无法正确处理我的消息,因为它被编组为字节表示。如果不使用 Rest DSL,该路由也能正常工作,所以我假设问题出在 http 响应上。如果我尝试以下操作:
我犯了同样的错误。能不能规范化格式,做一些处理步骤,然后返回一个Json?我在某个地方出错了吗 - 我很乐意理解为什么会这样?
慕少森
相关分类