Camel发送POST请求无响应,如何获取目标接口返回结果?
解决Camel POST请求无法获取响应的问题
嘿,我来帮你搞定这个问题!从你的路由配置来看,数据能成功处理、发送到目标API,说明核心逻辑是通的——但你没收到响应,问题出在路由没有把目标API的响应回传给发起请求的客户端。
问题根源
你的路由从CXF端点接收请求,处理后发送POST到目标API,但路由在to调用后就直接结束了,没有把目标API返回的响应传递回上游的CXF调用方。Camel是管道式的消息处理模型,默认会把最后一步的消息体作为整个路由的输出,但你需要确保这个响应能被CXF端点正确序列化返回给调用者。
解决方案
只需要调整路由,让目标API的响应能被保留并传递回去,甚至可以添加日志方便调试:
<camelContext id="camelId" xmlns="http://camel.apache.org/schema/spring"> <route id="pushItem" streamCache="true"> <from uri="cxf:bean:pushItemCxfEndpoint" /> <process ref="pushItemTransformer" /> <log message="Sending request to API: ${body}"/> <setHeader headerName="CamelHttpMethod"> <constant>POST</constant> </setHeader> <!-- 发送请求并获取目标API的响应 --> <to uri="http://endpoint/api/v1/products"/> <!-- 可选:打印响应日志,方便验证是否拿到了响应 --> <log message="Received API response: ${body}"/> <!-- 路由结束后,响应会自动返回给CXF的调用方 --> </route> </camelContext>
额外检查点
如果调整后还是没拿到响应,可以排查这几个点:
- 确认目标API确实返回响应:用Postman或curl直接调用
http://endpoint/api/v1/products,验证是否有正常的响应内容。 - 响应格式匹配:如果目标API返回的格式和CXF端点定义的输出类型不一致,需要添加一个响应转换处理器(比如
pushItemResponseTransformer),把API响应转换成CXF能识别的格式:<to uri="http://endpoint/api/v1/products"/> <process ref="pushItemResponseTransformer"/> <log message="Transformed response ready to return: ${body}"/> - CXF端点配置:确保你的CXF端点正确定义了输出参数类型,这样Camel才能把响应正确序列化返回给调用者。
内容的提问来源于stack exchange,提问作者Jeroen de Beer
相关产品推荐
相关产品推荐

