【问题标题】:Using url-expression使用 url 表达式
【发布时间】:2016-01-19 12:53:09
【问题描述】:

我有一个配置为从属性和一些变量构建 url 的 spring 集成:

    <int-http:outbound-gateway
            url="${pdf.url}?id={id}&amp;version={version}"
            request-factory="int.http.requestFactory"
            http-method="GET"
            transfer-cookies="false"
            header-mapper="fTokenHeaderMapper"
            expected-response-type="java.lang.String" >
        <int-http:uri-variable name="id" expression="payload.id"/>
        <int-http:uri-variable name="version" expression="payload.version"/>
    </int-http:outbound-gateway>

现在我想更改它,以便可以即时更改服务器部分(pdf.url),而不仅仅是在启动时更改。为了实现这一点,我已经从“url”更改为“url-expression”,如下所示:

    <int-http:outbound-gateway
            url-expression="@configurationService.getConfiguration('pdf.url')?id={id}&amp;version={version}"
            request-factory="int.http.requestFactory"
            http-method="GET"
            transfer-cookies="false"
            header-mapper="fTokenHeaderMapper"
            expected-response-type="java.lang.String" >
        <int-http:uri-variable name="id" expression="payload.id"/>
        <int-http:uri-variable name="version" expression="payload.version"/>
    </int-http:outbound-gateway>

这条线似乎有效:

url-expression="@configurationService.getConfiguration('pdf.url')"

但是如何以与第一个示例类似的方式包含变量?

【问题讨论】:

    标签: java spring spring-integration spring-el


    【解决方案1】:

    我也会将 URI 变量部分移至 configurationService.getConfiguration()。读取 XML 配置会更干净。

    另一方面,url-expression 是一个 SpEL 运行时表达式。因此,它的任何不应该是可执行的部分,必须是 literal

    url-expression="@configurationService.getConfiguration('pdf.url') + '?id={id}&amp;version={version}'"
    

    【讨论】:

      【解决方案2】:

      您的配置仅在启动期间读取一次,因此您无法在运行时更改 pdf.url 的值并期望它会动态更改。

      【讨论】:

        猜你喜欢
        • 2012-08-23
        • 2015-01-14
        • 2011-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多