在http-outbound网关中设置动态自定义标头

时间:2017-02-09 05:49:52

标签: spring spring-integration

我有http出站网关:

<int-http:outbound-gateway encode-uri="true" http-method="POST" header-mapper="headerMappper"
        charset="UTF-8" url="{url}"  expected-response-type="java.lang.String">
        <int-http:uri-variable name="url" expression="headers.uri"/>
    </int-http:outbound-gateway>

Header Mapper bean配置:

<bean    class="com.cc.gateway.HeaderMapper"/>

public class HeaderMapper extends org.springframework.integration.http.support.DefaultHttpHeaderMapper{

    @Bean("headerMappper")
    public HeaderMapper mapHeader()
    {
        this.setOutboundHeaderNames(getHeaderMapper());
        this.setUserDefinedHeaderPrefix("");
        return this;
    }

    public String[] getHeaderMapper()
    {
        Object [] headersArray =new HeadersConfig().getHeaders().keySet().toArray();

        return Arrays.copyOf(headersArray,headersArray.length,String[].class);

    }

}

如何在每个请求上设置标头映射器配置? 我的配置在部署时只读取一次。

1 个答案:

答案 0 :(得分:1)

DefaultHttpHeaderMapper并非用于此类用途;更改每个请求的映射标头不是线程安全的。

您必须覆盖这么多方法才能使其成为线程安全的,实现自己的自定义HeaderMapper<HttpHeaders>可能会更容易。

如果您一次只发送一封邮件,只需覆盖fromHeaders()并在调用super.fromHeaders()之前更新要映射的标头。

也就是说,想要动态更改映射标头是非常不寻常的。