![](/img/trans.png)
[英]Spring Integration Http Outbound Gateway Header Mapper
[英]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.