1

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

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

我的 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程序传递 URL(),尤其是参数(a=1&b=2&c=3)?

4

1 回答 1

2

您能解释一下为什么不想为此目的使用url-expression吗?来自参考手册:

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

url 表达式

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

于 2013-09-19T11:13:34.917 回答