spring集成,在出站网关中想要使用动态URL,如
<bean id="requestValues" class="com.src.model.RequestValues"/>
<int-http:outbound-gateway
request-channel="reqChannel" url="${UrlValue}"
http-method="${reqmethod}" expected-response-type="java.lang.String" header-mapper="headerMapper"
charset="UTF-8" reply-timeout="5000" reply-channel="responseChannel" >
<int-http:uri-variable name="UrlValue" expression="#{requestValues.getUrl()}" />
<int-http:uri-variable name="reqmethod" expression="#{requestValues.getReqMethod()}" />
</int-http:outbound-gateway>
这里Requestvalues是简单的POJO 它就像
@Data
public class Requestvalues {
public String Url;
public String reqMethod;
}
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.integration.http.outbound.HttpRequestExecutingMessageHandler#0': Cannot create inner bean '(inner bean)#6ea2bc93' of type [org.springframework.integration.config.ExpressionFactoryBean] while setting bean property 'uriVariableExpressions' with key [url]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#6ea2bc93': Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.integration.config.ExpressionFactoryBean]: Constructor threw exception; nested exception is java.lang.IllegalArgumentException: expressionString must not be empty or null
最佳答案
您可以将 URL 或 http 方法等元数据设置为 header 。您甚至可以在设置 header 时使用 Spring EL,例如
<int:header-enricher>
<int:header name="url" value="${url.base}/reports/"/>
</int:header-enricher>
然后使用出站网关的表达式
<int-http:outbound-gateway id='httpGateway'
url-expression="headers['url']"
...
/>
关于java - Spring集成出站网关想要使用动态URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46540067/