我们为spring XD编写了一个自定义Http-client,并计划使用这个自定义处理器来调用不同的API。但是,我们需要根据有效负载调用两个不同的API。除了使用动态路由器(写入命名通道)之外,还有一种方法可以动态设置URL以供http-client调用吗?这是当前的配置。
<header-filter input-channel="input" output-channel="inputX"
header-names="x-death" />
<service-activator input-channel="inputX" ref="gw" />
<gateway id="gw" default-request-channel="toHttp"
default-reply-timeout="0" error-channel="errors" />
<beans:bean id="inputfields"
class="com.batch.httpclient.HTTPInputProperties">
<beans:property name="nonRetryErrorCodes" value="${nonRetryErrorCodes}" />
</beans:bean>
<beans:bean id="responseInterceptor"
class="com.batch.httpclient.ResponseInterceptor">
<beans:property name="inputProperties" ref="inputfields" />
</beans:bean>
<chain input-channel="errors" output-channel="output">
<transformer ref="responseInterceptor" />
</chain>
<int-http:outbound-gateway id='batch-http'
header-mapper="headerMapper" request-channel='toHttp' url-expression="${url}"
http-method="${httpMethod}" expected-response-type='java.lang.String'
charset='${charset}' reply-timeout='${replyTimeout}' reply-channel='output'>
</int-http:outbound-gateway>
<beans:bean id="headerMapper"
class="org.springframework.integration.http.support.DefaultHttpHeaderMapper"
factory-method="outboundMapper">
<beans:property name="outboundHeaderNames" value="*" />
<beans:property name="userDefinedHeaderPrefix" value="" />
</beans:bean>
<channel id="output" />
<channel id="input" />
<channel id="inputX" />
<channel id="toHttp" />
答案 0 :(得分:0)
如果它基于有效载荷类型,那么这样的东西应该有用......
url-expression="payload.getClass().getSimpleName().equals("Bar") ? 'http://foo/bar' : 'http://foo/baz'"
如果它是有效载荷上的属性,那么
url-expression="payload.foo.equals("bar") ? 'http://foo/bar' : 'http://foo/baz'"
修改强>
或
url-expression="payload.foo.equals("bar") ? '${url1}' : '${url2}'"
这需要更改属性元数据类以重命名url
并添加url2
。