猿问

Apache Camel - 在 Rest DSL 中编组到 Json

我正在尝试使用 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?我在某个地方出错了吗 - 我很乐意理解为什么会这样?


SMILET
浏览 138回答 1
1回答

慕少森

如果您在内部过滤而不是使用 JsonPath 来实施聚合策略,可能会更容易,因此更容易理解。实际上,split()默认情况下使用的方法不会给出您期望的结果这是一个例子:@Componentpublic 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");    }}我还邀请您检查可用于拆分器和聚合器及其组合的所有功能。
随时随地看视频慕课网APP

相关分类

Java
我要回答