json - 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 中创建映射器对象。先感谢您
解决方案
如果处理后的 Camel 消息是 InputStream 类型,那么这个流显然只能读取一次。
要解决这个问题:
- 要么启用骆驼流缓存(http://camel.apache.org/stream-caching.html)
- 或在您的路由中插入一个步骤(在 jsonpath 查询之前)将消息正文转换为字符串(以便可以多次读取:(例如
<convertBodyTo type="java.lang.String" charset="ISO-8859-1">
))
推荐阅读
- objective-c - 我正在制作一个 macOS 应用程序。是否可以在不同版本的操作系统上使用不同的应用程序图标?
- java - 如何修复多次单击按钮和(数据库测验应用程序)
- typescript - 通用类型 'GraphQLObjectType
' 需要 0 到 2 个类型参数 - python - Python遍历文件夹中的excel文件
- java - java DSL Spring集成中的免费队列通道
- azure - AppServicePlan 中横向扩展队列触发的 Azure 函数行为
- python - Tensorflow 值错误:输入与层不兼容
- common-lisp - sb-ext:defglobal 访问反汇编 REPL 和 .lisp 文件不同
- corda - Corda公证防止双花,如何检查?
- stripe-payments - Python 条纹支付网关