骆驼-使用jsonpath后消耗json主体

时间:2018-10-26 15:01:36

标签: json apache-camel jsonpath

我在休息环境中使用骆驼,而且我必须处理一个来自request的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中创建一个映射器对象。预先谢谢你

1 个答案:

答案 0 :(得分:1)

如果处理后的骆驼消息的类型为InputStream,则该流显然只能读取一次。

要解决此问题:

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