Jasper REST传递集合作为参数

时间:2013-09-09 14:58:02

标签: rest jasper-reports jasperserver

我有一个报告,它接收一个List参数以在IN子句中使用它:

$X{IN, personID, _personID}

通过iReport中的Web应用程序或远程存储库视图运行报告时,该报告可以正常工作。

现在我需要使用REST api来调用它。我尝试了几种不同的方法来传递我的资源描述符中的列表值,但没有一种方法有效。

<resourceDescriptor name="Test_Report" wsType="reportUnit" uriString="/Test/Test_Report" isNew="false">

    <parameter name="_personId" isListValue="true"><![CDATA[1]]></parameter>

</resourceDescriptor>

上面的示例返回以下错误:

Invalid type java.lang.String for parameter _personId used in an IN clause; the value must be an array or a collection.

我也尝试了以下内容:

<parameter>
<name>_personId</name>
<value isListValue="true">
    3
</value>
</parameter>

但是这会返回包含所有记录的报告,而不仅仅是Id = 3的人。

2 个答案:

答案 0 :(得分:3)

我解决此问题的方法是使用JasperServer的REST V2服务。

此外,V2与第一版服务相比具有两个优势:

  • 它不需要资源描述符
  • 它在一个GET请求中运行并导出报告

运行和导出报告所需的所有信息都通过请求URL传递,例如:

<host>/rest_v2/reports/Test/TestReport.html?_personId=3&_personId=4&_personId=5&_personId=6

答案 1 :(得分:0)

您的方法完全可以,但是还有另一个关于集合类型参数的小技巧(可能是个错误

  • 如果您的收藏夹中有1个以上的商品,则表示此商品完全可以正常工作: (3,4,5,6)->?_personId=3&_personId=4&_personId=5&_personId=6
  • 如果集合中只有一项,则还必须添加一个空项: (3)->?_personId=3&_personId=

顺便说一下,我在docker上使用Jasper Server CE 7.2.0。