为了账号安全,请及时绑定邮箱和手机立即绑定

Apache Camel - 在 Rest DSL 中编组到 Json

Apache Camel - 在 Rest DSL 中编组到 Json

SMILET 2023-06-14 16:38:58
我正在尝试使用 Camel 中的 Rest DSL 处理一个 csv 文件。当我将 CSV 和 Marshall 拆分为 JSON 时,我遇到了一些奇怪的行为。这是我的代码:@Componentpublic classProcessHandler 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(....但是,如果我按如下方式编辑路线:@Componentpublic classProcessHandler 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?我在某个地方出错了吗 - 我很乐意理解为什么会这样?
查看完整描述

1 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

如果您在内部过滤而不是使用 JsonPath 来实施聚合策略,可能会更容易,因此更容易理解。


实际上,split()默认情况下使用的方法不会给出您期望的结果


这是一个例子:


@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().method(ItemsSplittingStrategy.class, "splitItems")

                                  .parallelProcessing()

                                  .marshal().json(JsonLibrary.Gson)

                              .end()

                    .to("file:/file.json");

    }

}


我还邀请您检查可用于拆分器和聚合器及其组合的所有功能。


查看完整回答
反对 回复 2023-06-14
  • 1 回答
  • 0 关注
  • 137 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信