2017-02-09 7 views
2

У меня есть HTTP исходящий шлюз:Установить динамические пользовательские заголовки в 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> 

Заголовок конфигурации Mapper боб:

<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

DefaultHttpHeaderMapper не предназначен для такого использования; это не поточно-безопасное изменение отображаемых заголовков для каждого запроса.

Вам нужно было бы переопределить так много методов, чтобы сделать его потокобезопасным, вероятно, было бы проще просто реализовать собственный пользовательский номер HeaderMapper<HttpHeaders>.

Если у вас есть только одно сообщение, отправляемое за один раз, просто переопределите fromHeaders() и обновите заголовки для сопоставления перед вызовом super.fromHeaders().

При этом довольно необычно хотеть динамически изменять отображаемые заголовки.