apache-camel - 多个注释@JsonPath 不起作用
问题描述
我正在通过 http4 Camel 的组件调用 REST 服务,并且我想将 JSON 响应映射到某些标头。出于这个原因,我使用了 jsonpath 语言。
<route>
...
<toD uri="http4://theCallingServiceUrl"/>
<setHeader headerName="CamelAddressesLink">
<jsonpath>$._links.collection/addresses.href</jsonpath>
</setHeader>
<setHeader headerName="CamelAvailabilitiesLink">
<jsonpath>$._links.collection/availabilities.href</jsonpath>
</setHeader>
</route>
当我尝试通过 bean 做同样的事情时会出现问题。
public void test(@JsonPath("$._links.collection/addresses.href") String address,
@JsonPath("$._links.collection/availabilities.href") String availabilities) {
...
}
我得到以下
Caused by: com.jayway.jsonpath.PathNotFoundException: Expected to find an object with property ['_links'] in path $ but found 'java.lang.String'. This is not a json object according to the JsonProvider: 'com.jayway.jsonpath.spi.json.JsonSmartJsonProvider'.
有任何想法吗?如果我尝试从 JSON 中仅提取一个值,它会起作用,如果我尝试添加多个 @JsonPath 注释,则会出现问题。
谢谢!
解决方案
似乎 bean 组件重置了流缓存。因此,即使我将流缓存设置为路由,执行 bean 时也会删除此设置。这就是我们只能使用 1 个@JsonPath 的原因。
在 http4 组件之后立即将正文转换为字符串的替代方法
<toD uri="http4://theCallingServiceUrl"/>
<convertBodyTo type="String"/>
现在我们的 bean 将与我们想要的任意数量的 @JsonPath 一起工作。
推荐阅读
- racket - 如何设置 DrRacket 以便我可以画图
- r - 有没有办法为特定的数据点分配特定的颜色?
- sql - SQL:如何将日期范围计数作为行而不是列?
- docker - Docker 卷为空
- mysql - MYSQL:根据其他单元格中的字符串值添加值
- javascript - 在浏览器中呈现原始电子邮件消息
- node.js - 使用服务器进行聊天备份,例如 Telegram 或 WhatsApp
- python - 如何摆脱 Pandas 数据框中的索引列名称?
- javascript - 如何在导入了许多中间件的 VSCode 中轻松修复拼写错误?(javascript)
- javascript - 如何避免循环遍历多个数组