首页 > 解决方案 > Camel - 使用 jsonpath 后会消耗 json 主体

问题描述

我在休息环境中使用骆驼,我必须操纵从请求中获得的 json。它是这样的:

{
 'field1':'abc',
 'field2':'def'
}

我所要做的就是提取 field1 和 field2 并将它们放入 2 个属性中,所以我尝试了类似的方法

<setProperty propertyName="Field1">
  <jsonpath>$.field1</jsonpath>
</setProperty>
<setProperty propertyName="Field2">
  <jsonpath>$.field2</jsonpath>
</setProperty>

但我收到此错误: org.apache.camel.ExpressionEvaluationException: com.jayway.jsonpath.PathNotFoundException: Expected to find an object with property ['field2'] in path $ but found 'java.lang.String'. This is not a json object according to the JsonProvider: 'com.jayway.jsonpath.spi.json.JsonSmartJsonProvider'.

经过一些测试,我发现我的身体在第一次使用 jsonpath 后是空的。

使用 xpath 应用于 XML 的相同过程不会产生任何错误,我想知道是否可以对 jsonpath 执行相同操作,而不是在 java 中创建映射器对象。先感谢您

标签: jsonapache-cameljsonpath

解决方案


如果处理后的 Camel 消息是 InputStream 类型,那么这个流显然只能读取一次。

要解决这个问题:

  • 要么启用骆驼流缓存(http://camel.apache.org/stream-caching.html
  • 或在您的路由中插入一个步骤(在 jsonpath 查询之前)将消息正文转换为字符串(以便可以多次读取:(例如<convertBodyTo type="java.lang.String" charset="ISO-8859-1">))

推荐阅读