【问题标题】:How to retrieve request parameter in spring integration http-inbound-gateway by spring el?如何通过spring el在spring集成http-inbound-gateway中检索请求参数?
【发布时间】:2013-07-03 01:38:48
【问题描述】:

我有一个 http-inbound-gateway,我想检索一个请求参数来填充入站通道作为有效负载。我发现http-inbound-gateway 支持spring 表达式,所以我可以使用#requestParams 来检索请求参数。似乎 #requestParams 等效于返回 Map 的 request.getParameters('key') 但我希望调用返回 String 的 request.getParameter('key') 。目前我必须使用 new String(#requestParams['key']) 来解决这个问题。有没有更好的方法来做到这一点?

<int-http:inbound-gateway path="/mypath"
    supported-methods="GET" payload-expression="new String(#requestParams['key']?:'')"
    request-channel="inboundChannel" reply-channel="outboundChannel"
    error-channel="errorChannel"
    message-converters="stringHttpMessageConverterUsingUtf8">       
</int-http:inbound-gateway>

【问题讨论】:

    标签: spring-integration spring-el http-request-parameters


    【解决方案1】:

    我在 org.springframework.integration.http.inbound.HttpRequestHandlingEndpointSupport 中找到源代码

    @SuppressWarnings({ "rawtypes", "unchecked" })
    private Message<?> actualDoHandleRequest(HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws IOException {
    //omitted codes
    LinkedMultiValueMap<String, String> requestParams = this.convertParameterMap(servletRequest.getParameterMap());
            evaluationContext.setVariable("requestParams", requestParams);
    //omitted codes    
    }
    

    所以#requestParameters 是一个LinkedMultiValueMap 对象。我可以使用

    #requestParams.get('your key')?:''//null safe 
    

    获取所需的String请求参数。

    【讨论】:

      【解决方案2】:

      requestParams 变量是LinkedMultiValueMap 类型的对象。 LinkedMultiValueMap#get 方法返回列表。所以你的代码#requestParams.get('your key')?:''//null safe 返回字符串列表。它在大多数情况下都可以正常工作,但例如比较 (#requestParams.get('your key')?:'').equals('value') 会失败。获取第一个字符串参数的完整 null 安全代码是:

      (#requestParams.get('your key')?:{''})[0]
      

      请注意,LinkedMultiValueMap 将多个值存储在 LinkedList 中。如果只需要一个请求参数值,可以考虑使用LinkedMultiValueMap#toSingleValueMap方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-07
        • 1970-01-01
        • 1970-01-01
        • 2017-09-15
        • 2011-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多