Spring Integration:以编程方式传递URL /查询参数

时间:2013-09-19 10:30:04

标签: java spring spring-integration

我通过Spring Integration调用外部HTTP URL, 但是 我的URL在spring上下文文件中完全硬编码。

我想:
- 从我的程序中传递查询参数(即a = 1& b = 2& c = 3)
- 从我的progam(i.e http://host/port/xyz

传递URL本身

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)?

1 个答案:

答案 0 :(得分:2)

你能解释为什么不想为此目的使用 url-expression ? 参考手册:

  

指定网址;您可以使用'url'属性或'url-expression'属性。 'url'是一个简单的字符串(带有URI变量的置位符,如下所述); 'url-expression'是一个SpEL表达式,以Message作为根对象,启用动态URL。表达式求值得到的url仍然可以有URI变量的占位符。

url-expression

在此表达式中,您可以定义任何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} 请阅读手册。