gpt4 book ai didi

java - Spring 集成: Passing URL/Query Params programatically

转载 作者:行者123 更新时间:2023-11-30 04:13:55 25 4
gpt4 key购买 nike

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

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

我的 Spring Integration 上下文文件当前如下所示:

<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);
}

如何通过我的程序传递 URL(http://host:port/xyz),尤其是参数(a=1&b=2&c=3)?

最佳答案

您能否解释一下为什么您不想使用 url-expression 来实现此目的?来自引用手册:

To specify the URL; you can use either the 'url' attribute or the 'url-expression' attribute. The 'url' is a simple string (with placedholders for URI variables, as described below); the 'url-expression' is a SpEL expression, with the Message as the root object, enabling dynamic urls. The url resulting from the expression evaluation can still have placeholders for URI variables.

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}请阅读手册。

关于java - Spring 集成: Passing URL/Query Params programatically,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18892253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com