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

Spring Integration映射请求头至响应头时无法忽略大小写的问题求助

解决Spring Integration中HTTP头大小写敏感的映射问题

针对你遇到的请求头与响应头因大小写差异无法自动替换的问题,提供以下两种可行解决方案:

方案一:自定义大小写不敏感的HttpHeaderMapper

继承DefaultHttpHeaderMapper,重写核心方法统一头名称的大小写规则,让框架将不同大小写的同名头视为同一个:

import org.springframework.http.HttpHeaders;
import org.springframework.integration.http.support.DefaultHttpHeaderMapper;
import java.util.HashMap;
import java.util.Map;

public class CaseInsensitiveHttpHeaderMapper extends DefaultHttpHeaderMapper {

    @Override
    protected String normalizeHeaderName(String headerName) {
        // 将所有头名称转为小写,消除大小写差异
        return headerName.toLowerCase();
    }

    @Override
    protected void populateStandardHeaders(Map<String, Object> headers, HttpHeaders httpHeaders) {
        // 预处理响应头,将所有键转为小写后再交给父类处理
        Map<String, String> lowerCaseHeaders = new HashMap<>();
        httpHeaders.forEach((key, value) -> lowerCaseHeaders.put(key.toLowerCase(), value.get(0)));
        super.populateStandardHeaders(headers, HttpHeaders.wrap(lowerCaseHeaders));
    }
}

配置使用自定义Mapper

在Spring配置类中注册该Mapper,并绑定到出站网关:

@Bean
public HttpHeaderMapper caseInsensitiveHeaderMapper() {
    CaseInsensitiveHttpHeaderMapper mapper = new CaseInsensitiveHttpHeaderMapper();
    // 配置需要映射的请求/响应头,包含目标头X-JWS-Signature
    mapper.setOutboundHeaderNames(new String[]{"X-JWS-Signature", "Content-Type"});
    mapper.setInboundHeaderNames(new String[]{"X-JWS-Signature", "Content-Length"});
    return mapper;
}

@Bean
public HttpRequestExecutingMessageHandler outboundGateway() {
    HttpRequestExecutingMessageHandler handler = new HttpRequestExecutingMessageHandler("你的接口地址");
    handler.setHeaderMapper(caseInsensitiveHeaderMapper());
    // 其他网关配置...
    return handler;
}

方案二:手动处理响应头(场景化解决方案)

如果仅需要处理X-JWS-Signature这一个特定头,可直接在出站网关后添加转换器,手动完成头的替换:

import org.springframework.integration.transformer.GenericTransformer;
import org.springframework.messaging.Message;
import org.springframework.messaging.support.MessageBuilder;
import java.util.HashMap;
import java.util.Map;

@Bean
public GenericTransformer<Message<?>, Message<?>> jwsHeaderTransformer() {
    return message -> {
        Object responseJwsValue = message.getHeaders().get("X-Jws-Signature");
        if (responseJwsValue != null) {
            Map<String, Object> updatedHeaders = new HashMap<>(message.getHeaders());
            updatedHeaders.put("X-JWS-Signature", responseJwsValue);
            updatedHeaders.remove("X-Jws-Signature");
            return MessageBuilder.createMessage(message.getPayload(), updatedHeaders);
        }
        return message;
    };
}

将该转换器绑定到出站网关的输出通道即可生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:21:03