在骆驼路线中向 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 对象组成。
当我尝试将当前键值对周围没有引号的 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 对象组成。