5.7. 执行 JPQL 查询(GET)
在使用 REST API 执行查询之前,查询语句必须在配置文件中进行描述。需要在 web 模块的主包中创建 rest-queries.xml
文件(例如 com.company.sales
)。然后,必须在 web 模块的应用程序属性文件(web-app.properties)中定义该文件。
cuba.rest.queriesConfig = +com/company/sales/rest-queries.xml
rest-queries.xml
内容:
<?xml version="1.0"?>
<queries xmlns="http://schemas.haulmont.com/cuba/rest-queries.xsd">
<query name="ordersAfterDate" entity="sales$Order" view="order-edit-view">
<jpql><![CDATA[select o from sales$Order o where o.date >= :startDate and o.date <= :endDate]]></jpql>
<params>
<param name="startDate" type="java.util.Date"/>
<param name="endDate" type="java.util.Date"/>
</params>
</query>
</queries>
要执行 JPQL 查询,必须执行以下 GET 请求:
http://localhost:8080/app/rest/v2/queries/sales$Order/ordersAfterDate?startDate=2016-11-01&endDate=2017-11-01
请求 URL 部分:
-
sales$Order
- 提取的实体名称。 -
ordersAfterDate
- 配置文件中的查询名称。 -
startDate
和endDate
- 带有具体值的请求参数。
参数值必须按照对应 datatype 的格式传入,示例:
-
如果查询参数的类型是
java.util.Date
,则值的格式从DateTimeDatatype
获取,默认格式是yyyy-MM-dd HH:mm:ss.SSS
-
对于
java.sql.Date
查询参数类型,值的格式从DateDatatype
获取,默认格式是yyyy-MM-dd
-
对于
java.sql.Time
查询参数类型,值的格式从TimeDatatype
获取,默认格式是HH:mm:ss
必须将 OAuth token 放在带有 Bearer
类型的 Authorization
请求头中。
该方法返回提取的实体实例的 JSON 数组:
[
{
"_entityName": "sales$Order",
"_instanceName": "00002",
"id": "b2ad3059-384c-3e03-b62d-b8c76621b4a8",
"date": "2016-12-31",
"description": "New Year party set",
"number": "00002",
"items": [
{
"_entityName": "sales$OrderItem",
"_instanceName": "Jack Daniels",
"id": "0c566c9d-7078-4567-a85b-c67a44f9d5fe",
"price": 50.7,
"name": "Jack Daniels"
},
{
"_entityName": "sales$OrderItem",
"_instanceName": "Hennessy X.O",
"id": "c01be87b-3f91-7a86-50b5-30f2f0a49127",
"price": 79.9,
"name": "Hennessy X.O"
}
],
"customer": {
"_entityName": "sales$Customer",
"_instanceName": "Morgan Collins",
"id": "5d111245-2ed0-abec-3bee-1a196da92e3e",
"firstName": "Morgan",
"lastName": "Collins"
}
}
]
Swagger 文档 中提供了可能的请求参数的完整列表。