在Spring-Integration中将X附加到自定义请求标头

时间:2015-12-07 17:23:29

标签: spring spring-integration

我发现当我想使用Spring-Integration进行REST调用时,它会自动附加'x'以防其自定义标头。

例如,在发送自定义请求标头(例如API-KEY)时的Spring集成中,API调用中的实际请求标头名称变为X-API-KEY,因此它失败。

看起来Spring正在通过强制执行自定义请求标头以X开始标准化,是否有解决方法?

<int:channel id="requestChannel"/>
<int:channel id="httpHeaderEnricherChannel"/>
<int-http:outbound-gateway request-channel="requestChannel"
                                       url="http://localhost:9090/balance"
                                       http-method="GET"
                                       mapped-request-headers="Api-Key"
                                       expected-response-type="java.lang.String"/>

<int:header-enricher input-channel="httpHeaderEnricherChannel" 
                     output-channel="requestChannel">
    <int:header name="Api-Key" value="pass"/>
</int:header-enricher>

2 个答案:

答案 0 :(得分:3)

您应该使用DefaultHttpHeaderMapper.outboundMapper()声明setUserDefinedHeaderPrefix(null) bean,并包括您的自定义Api-Key标头映射。之后,您应该使用mapped-request-headers引用替换header-mapper属性。

我们修改了该功能,并决定在下一个版本中删除“X-”默认前缀。

有关详细信息,请参阅此处Custom HTTP headers : naming conventions和此处https://jira.spring.io/browse/INT-3903

答案 1 :(得分:0)

感谢@Artem的澄清,以及Gary的帖子Spring Integration Http Outbound Gateway Header Mapper

我能够解决问题

<int:channel id="requestChannel"/>
<int:gateway id="requestGateway" 
             service-interface="org.springframework.integration.samples.http.RequestGateway"
             default-request-channel="requestChannel">
            <int:default-header name="Api-Key" value="pass" />
</int:gateway>

<int-http:outbound-gateway request-channel="requestChannel"
                           header-mapper="headerMapper"
                           url="http://localhost:9090/balance"
                           http-method="GET"
                           expected-response-type="java.lang.String"/>

<beans:bean id="headerBean"
            class="org.springframework.integration.samples.http.HeaderBean" />

<bean id="headerMapper"
    class="org.springframework.integration.http.support.DefaultHttpHeaderMapper">
    <property name="inboundHeaderNames" value="*" />
    <property name="outboundHeaderNames" value="HTTP_REQUEST_HEADERS, Api-Key" />
    <property name="userDefinedHeaderPrefix" value="" />
</bean>