簡體   English   中英

具有多個http出站網關的Spring Integration不會清除標頭

[英]Spring Integration with multiple http outbound gateway does not clear the header

在我有的情況下:

<int-http:outbound-gateway request-channel="dataHubRawDataUploadChannel"
        id="raw" url-expression="headers['rawUrl']" http-method="POST"
        extract-request-payload="true" header-mapper="headerMapper"
        reply-channel="rawDataUploadResponseChannel" expected-response-type="java.lang.String" 
         error-handler="rawResponseErrorHandler" />

    <int-http:outbound-gateway request-channel="canonicalHttpChannel"
        id="canonical" url-expression="headers['canonicalUrl']"
        http-method="POST" header-mapper="headerMapper" reply-channel="targetDataUploadChannel"
        expected-response-type="java.lang.String"    rest-template="customRestTemplate"/>


    <int-http:outbound-gateway request-channel="targetHttpChannel"
        id="target" url-expression="headers['targetUrl']"
        http-method="POST" header-mapper="headerMapper" reply-channel="targetUploadResponseProcessor"
        expected-response-type="java.lang.String" />

我面臨以下問題:

發送第三個請求時不會清除第一個和第二個請求的標頭 ,從而導致Http 400響應。

我嘗試清理標頭,但發現的唯一解決方案是重寫負責實際HTTP請求的RestTemplate類,並在那里清除標頭,這是一個丑陋的解決方案。

您是否有更好的方法來使用Spring Integration?

DefaultHttpHeaderMapper有一個setExcludedOutboundStandardRequestHeaderNames方法,您可以在其中傳遞一個不想從出站消息傳播的標頭名稱數組。

有關示例,請參見此答案

編輯

如果使用Java配置,只需將該映射器定義為@Bean ,如該答案所示。

如果使用XML配置:

<bean id="mapper" class="org.springframework.integration.http.support.DefaultHttpHeaderMapper"
        factory-method="outboundMapper">
    <property name="excludedInboundStandardResponseHeaderNames">
        <array>
            <value>Host</value>
            <value>User-Agent</value>
        </array>
    </property>
</bean>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM