You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache Camel脚本读取body中caListID报错:Key未在InputStreamCache中找到

问题原因及解决办法

问题根源

从错误信息可明确,当前body的实际类型是InputStreamCache,并非解析后的JSON结构化对象(如Map或自定义POJO)。你在日志中看到的JSON字符串只是流被读取后打印的内容,但Camel此时并未将流解析为可通过OGNL路径直接访问的结构化数据,因此直接使用${body[caListID]}会提示键不存在。

解决步骤

必须先将输入的JSON流解析为结构化对象,才能正常访问字段:

方法1:解析为Map

在访问body字段前,添加unmarshal().json()步骤,把InputStreamCache转换为Map:

.log("message: ${body}")
// 将JSON流解析为Map结构
.unmarshal().json(JsonLibrary.Jackson, Map.class)
.setHeader(KafkaConstants.KEY, simple("${body[caListID]}"))            
.log("message: ${body[caListID]}")

方法2:绑定到自定义POJO

如果有对应业务实体类,可直接解析为POJO,访问更类型安全:
假设存在实体类ListInfo:

public class ListInfo {
    private Integer caListID;
    private Long ciqWatchListID;
    // 需提供getter/setter方法
}

路由代码调整为:

.log("message: ${body}")
.unmarshal().json(JsonLibrary.Jackson, ListInfo.class)
.setHeader(KafkaConstants.KEY, simple("${body.caListID}"))            
.log("message: ${body.caListID}")

注意事项

  • 确保项目已引入Camel JSON组件依赖(如camel-jackson),否则unmarshal().json()无法生效。
  • 流对象只能被读取一次,若之前的日志操作已读取流,后续解析可能失败,可调整顺序为先解析再打印,或使用cacheBody()缓存流内容。

内容的提问来源于stack exchange,提问作者Shasu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 17:07:53