在WSO2数据服务中使用QUERY_STRING的SQL多位置条件



我有一个带有可选过滤器的SQL Select语句,我想将其公开为API。我使用动态SQL查询来获得要过滤的参数,如下所示:

<query id="selectprofile" useConfig="default">
<sql>SELECT BADLOGINS,EMAIL,FRAMED_ROUTE,FULLNAME FROM USERS :filterQuery </sql>
<result outputType="json">{
"accounts":  
{ "account" :
[{
"BADLOGINS":"$BADLOGINS",
"EMAIL":"$EMAIL",
"FRAMED_ROUTE":"$FRAMED_ROUTE",
"FULLNAME":"$FULLNAME"
}]
}
}</result>
<param name="filterQuery" sqlType="QUERY_STRING"/>
</query>

但它对我不起作用,它给了我一个错误

DS代码:INCOMPATIBLE_PARAMETERS_ERROR\n已测试异常:-\njavax.xml.stream.XMLStreamException:DS故障消息:"Query.textractParameters"中出错,找不到具有的查询参数name:filterQuery\nDS代码:

我用get方法调用了这样的API:

localhost:8290/services/MYSQLDataService/selectprofile?FULLNAME=";AHMED";

注意:我遵循了这份文件https://apim.docs.wso2.com/en/latest/reference/synapse-properties/data-services/sample-queries/#defining-a-dynamic-sql-query

如果需要使用查询参数,则资源路径应仅包含资源名称。在您的情况下,resource元素应该如下,

<resource method="GET" path="selectprofile">
<call-query href="selectprofile">
<with-param name="filterQuery" query-param="filterQuery"/>
</call-query>
</resource>

根据上面的例子,在调用数据服务时,您需要传递一个名为filterQuery的查询参数。这个参数应该包含您需要使用的完整查询(似乎您错过了WHERE子句(。

localhost:8290/services/MYSQLDataService/selectprofile?filterQuery=WHERE FULLNAME="AHMED"

有关更多信息,请查看将数据作为REST资源公开

最新更新