我有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);
}
}
如何在每个请求上设置标头映射器配置? 我的配置在部署时只读取一次。
答案 0 :(得分:1)
DefaultHttpHeaderMapper
并非用于此类用途;更改每个请求的映射标头不是线程安全的。
您必须覆盖这么多方法才能使其成为线程安全的,实现自己的自定义HeaderMapper<HttpHeaders>
可能会更容易。
如果您一次只发送一封邮件,只需覆盖fromHeaders()
并在调用super.fromHeaders()
之前更新要映射的标头。
也就是说,想要动态更改映射标头是非常不寻常的。