0

我正在通过 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 使用 dataweave 函数reduce($+$$),但返回错误

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

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

现在,我如何将这些值传递给 DB toIN子句

4

1 回答 1

1

确实,您不能按原样将 ArrayList 作为查询字符串的一部分传递。您将需要转换为逗号分隔或类似的形式作为查询字符串的一部分传递,就像您对 dataweave 所做的那样。

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

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

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

还注意到您正在设置变量vPersonRef,但将其作为vars.ID doc:name文档的 jsut 引用。所以你需要使用name属性来引用它。所以vars.vPersonRef不是vars.ID(或重命名):

 <set-variable value="#[attributes.queryParams.'id']" doc:name="ID"   variableName="vPersonref"/>
...
vars.ID
于 2019-07-15T22:13:15.213 回答