在骆驼路线中向 JSON 对象添加引号

Adding quotes to JSON Object in Camel Route

当我尝试将当前键值对周围没有引号的 JSON 字符串解编为自定义 POJO 时,我 运行 遇到了问题。

我定义的骆驼路线是:

this.from("timer://foo?period=60000")
        .setBody(constant("select * from TEST_TABLE"))
        .to("jdbc:myJDBC")
        .marshal().json(JsonLibrary.Jackson)
        .split().jsonpath("$[*]").to("log:msg.inbound")
        .unmarshal().json(JsonLibrary.Jackson, Status.class)

从上面路线的日志中,我收到 SQL 查询的行

Exchange[ExchangePattern: InOnly, BodyType: String, Body: {IS_IT_TIME=N, TIME_RECEIVED=1623816000000}]

我希望返回的行带有引号,以便我可以解组它们:

Exchange[ExchangePattern: InOnly, BodyType: String, Body: {"IS_IT_TIME"="N", "TIME_RECEIVED"=1623816000000}]

我环顾四周,看到有一个选项可以为 Jackson 读取不带引号的 json,但我不想使用它,因为我没有直接与 ObjectMapper 交互。

如果有更简洁的方法将每一行作为 JSON 对象,我也会对此感兴趣。谢谢

万一有人最终需要这个,我使用下面的方法得到了我想要的结果:

this.from("timer://foo?period=60000")
            .setBody(constant(sqlQuery))
            .to("jdbc:myJDBC")
            .marshal().json(JsonLibrary.Jackson)
            .split().jsonpath("$[*]")
            .process(exchange -> {
                String newBody = new ObjectMapper()
                        .writeValueAsString(exchange.getIn().getBody());
                exchange.getIn().setBody(newBody);
            })
            .unmarshal().json(JsonLibrary.Jackson, Status.class)

在流程中,我们可以使用 writeValueAsString 方法(由 ObjectMapper 的实例提供)处理消息的主体,然后将返回的主体设置为此 String。 String newBody 由带引号的 JSON 对象组成。