java - 在 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 newBody 由带引号的 JSON 对象组成。
推荐阅读
- python - 用最后一个元素填充列表嵌套列表中的缺失值
- python - 在maya python中选择子对象
- java - GMail SMTP 不授权 JavaMail API 中使用的凭据——即使它们是正确的
- excel - 使用 Excel VBA 将文件从一个文件夹复制到另一个文件夹的更快方法
- icalendar - icalendar“不支持的日历 message.ics”问题
- azure - 使用防火墙规则在存储上备份 Azure 分析服务
- arrays - 如果案例没有内容,如何忽略整个 Google 表格行?
- windows - 在 Windows 中正确设置 git 过滤器并将参数传递给它
- java - 如何计算数组中单个值的频率?
- django - 在 Django 模板中链接到 AWS S3 直接图像上传