在Camel Route中向JSON对象添加引号



当我试图将当前键值对周围没有引号的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。StringnewBody由带引号的JSON对象组成。

最新更新