You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Camel路由转发REST请求时响应返回原调用方丢失HTTP头问题

问题原因
  • Camel Rest 消费者端点默认启用了响应头过滤策略,仅透传白名单内的标准HTTP头,自定义头、下游返回的非标准头默认都会被过滤丢弃,所以你在处理器中设置的头、原服务返回的头都无法传递到调用方。
  • 下游HTTP服务返回的响应状态码存储在CamelHttpResponseCode头中,Rest组件默认不会自动读取该头作为最终响应状态码,默认返回200状态码。
  • HTTP生产者默认会过滤部分响应头,如果没有配置bridgeEndpoint=true,下游返回的响应头不会全部带入Exchange中。
  • 消息体不受默认过滤策略限制,所以你在处理器中设置的响应体可以正常返回。
解决方法

步骤1:配置Rest组件允许透传响应头

在路由配置类的configure方法中,首先添加Rest全局配置,关闭响应头过滤或者添加你需要透传的头到白名单:

@Override
public void configure() throws Exception {
    // Rest全局配置
    restConfiguration()
        // 允许所有响应头透传,也可以指定具体需要的头,比如"Link","test","Content-Type"
        .allowedResponseHeaders("*")
        // 可选:完全禁用头过滤策略,不过滤任何头
        .setHeaderFilterStrategy(new HeaderFilterStrategy() {
            @Override
            public boolean applyFilterToCamelHeaders(String headerName, Object headerValue, Exchange exchange) {
                return false;
            }
            @Override
            public boolean applyFilterToExternalHeaders(String headerName, Object headerValue, Exchange exchange) {
                return false;
            }
        });
    // 原有路由逻辑
    ...
}

步骤2:给HTTP生产者添加透传配置

在调用下游服务的toD地址后添加bridgeEndpoint=true和skipResponseHeaders=false参数,确保下游返回的所有响应头和状态码都被带回Exchange:

.toD(createProducerJoramConfiguration.getUrlDestination() + "?bridgeEndpoint=true&skipResponseHeaders=false")

步骤3:显式设置响应状态码

在toD之后添加状态码设置逻辑,将下游返回的状态码作为最终响应的状态码:

.setHeader(Exchange.HTTP_RESPONSE_CODE, header("CamelHttpResponseCode"))

修改完成后的完整路由示例

@Override
public void configure() throws Exception {
    restConfiguration()
        .allowedResponseHeaders("*");

    this.from(RestRouteBuilder.endPoint(createProducerJoramConfiguration))
        .setExchangePattern(InOut)
        .removeHeader(Exchange.HTTP_URI)
        .toD(createProducerJoramConfiguration.getUrlDestination() + "?bridgeEndpoint=true&skipResponseHeaders=false")
        .setHeader(Exchange.HTTP_RESPONSE_CODE, header("CamelHttpResponseCode"))
        .setHeader("test", () -> "test")
        .process(createProducerJoramConfiguration.getProcessor());
}

内容的提问来源于stack exchange,提问作者user1823995

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:39:03