通过HTTP请求和IN运算符-Mule 4

时间:2019-07-15 13:05:47

标签: mule mule4

我正在通过HTTP请求发送查询参数的数组列表 数组列表ID的[1234,3442,9489,9498]

    <http:request method="GET" config-ref="HTTP_Request_configuration" 
     path="${p.path}">
    <http:query-params><![CDATA[#[output application/java
    ---    {"id" : payload  }]]]>
   </http:query-params>

我遇到以下错误:

  

错误:java.util.ArrayList无法转换为> java.lang.String

注意:如果我将它们发送给每个发送者,则其工作正常。但是我想使用数据库中的IN运算符通过查询字符串参数将它们作为列表传递给

选择查询:

   <flow name="query database"  > 
<set-variable value="#[attributes.queryParams.'id']" doc:name="ID"   variableName="ID"/>
<db:select doc:name="Get data"  config-ref="Db Connection">
  <db:sql >
   SELECT * from Mytable where id in ( :Ref) </db:sql>
                <db:input-parameters ><![CDATA[#[{
                    Ref: vars.ID
                }]]]></db:input-parameters>

    </db:select>

解决方法:使用数据编织函数1234,3442,9489,9498将数组列表转换为reduce($+$$),但返回错误

关于如何通过查询参数传递带有逗号分隔值的数组列表并在数据库查询的IN子句中使用它们的任何想法

  

编辑:(payload joinBy“,”)as String帮助我将这些值传递为   字符串,还更改了RAML中的类型。

现在,如何将这些值传递给DB到IN子句

1 个答案:

答案 0 :(得分:0)

确实,您不能按原样传递ArrayList作为查询字符串的一部分。您将需要转换为逗号分隔或类似的内容,以作为查询字符串的一部分进行传递,就像对dataweave一样。

要将它们用作需要ArrayList的IN查询的一部分,您将需要将逗号分隔的列表转换回ArrayList。

您可以使用splitBy函数在Dataweave中执行此操作:

#[attributes.queryParams.'id' splitBy(",")]

还注意到您正在设置变量vPersonRef,但是将其称为vars.ID doc:name只是为了文档。因此,您需要使用name属性来引用它。因此vars.vPersonRef不能vars.ID(或重命名):

 <set-variable value="#[attributes.queryParams.'id']" doc:name="ID"   variableName="vPersonref"/>
...
vars.ID