我通过Spring Integration调用外部HTTP URL, 但是 我的URL在spring上下文文件中完全硬编码。
我想:
- 从我的程序中传递查询参数(即a = 1& b = 2& c = 3)
- 从我的progam(i.e http://host/port/xyz
)
My Spring Integration Context文件目前如下所示:
<int:gateway id="requestGateway"
service-interface="com.bingo.RequestGateway"
default-request-channel="requestChannel"/>
<int:channel id="requestChannel"/>
<int-http:outbound-gateway request-channel="requestChannel"
url="http//host:port/xyz?a=1&b=2&c=3"
http-method="GET"
expected-response-type="java.lang.String"/>
调用它的java代码是:
public static void main(String args[])
{
ApplicationContext context = new ClassPathXmlApplicationContext(
"spring-integr.xml");
RequestGateway requestGateway = context.getBean("requestGateway",
RequestGateway.class);
String reply = requestGateway.sendMyRequest("");
System.out.println("Replied with: " + reply);
}
此外:
public interface RequestGateway {
public String sendMyRequest(String request);
}
如何通过我的程序传递网址(http://host:port/xyz
),特别是params(a = 1&amp; b = 2&amp; c = 3)?
答案 0 :(得分:2)
你能解释为什么不想为此目的使用 url-expression ? 参考手册:
指定网址;您可以使用'url'属性或'url-expression'属性。 'url'是一个简单的字符串(带有URI变量的置位符,如下所述); 'url-expression'是一个SpEL表达式,以Message作为根对象,启用动态URL。表达式求值得到的url仍然可以有URI变量的占位符。
在此表达式中,您可以定义任何bean的任何方法的调用。 此外:从3.0开始,还引入了另一个属性 - encode-uri ,以允许在发送请求之前禁用URI对象的编码。
无需从代码中执行此操作。对于SpEL,它将是相反的:从SI到您的代码,如果可以从Spring获得,当然。
<http:outbound-gateway url-expression="@myBean.getUrlFor(payload)"
request-channel="requests">
<uri-variable name="foo" expression="headers.bar"/>
</http:outbound-gateway>
作为该bean方法的结果,您的URL可能如下所示:
http://localhost/test2/{foo}
请阅读手册。