Apache Camel HTTP查询参数中Header变量无法生效问题
问题分析与解决方案
问题原因
Camel中to()方法使用的是静态端点URI,在路由启动阶段就会完成解析,不会在运行时动态替换${header.access_token}这类表达式。这导致实际发送请求时,URL中的access_token参数值就是字符串${header.access_token},而非Header中传入的真实token,因此API返回Access token not configured错误。
而log()组件本身支持运行时表达式求值,所以能正确打印出包含真实token的URL。
解决方案
将to()替换为toD()(Dynamic To),toD()专门用于处理需要运行时动态解析的端点URI,会在每次消息处理时对表达式进行求值:
修改后的路由代码:
from("direct:user_get") .log("https://api.vk.com/method/users.get?access_token=${header.access_token}&v=5.131") .toD("https://api.vk.com/method/users.get?access_token=${header.access_token}&v=5.131");
这样修改后,Camel会在运行时从Header中获取access_token的值,动态拼接成正确的请求URL,API就能正常识别token并返回有效响应。
内容的提问来源于stack exchange,提问作者Mihinator3000
相关产品推荐
相关产品推荐

