4.4.7. Выполнение JPQL-запроса (GET)
Перед выполнением запроса с помощью REST API необходимо описать его в конфигурационном файле. В корневом пакете модуля web (например, com.company.sales
) необходимо создать файл rest-queries.xml
. Затем этот файл объявляется в файле свойств приложения модуля 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-запрос к REST API:
http://localhost:8080/app/rest/v2/queries/sales$Order/ordersAfterDate?startDate=2016-11-01&endDate=2017-11-01
Части URL:
-
sales$Order
- имя извлекаемой сущности. -
ordersAfterDate
- имя запроса из конфигурационного файла. -
startDate
иendDate
- параметры запроса со значениями.
OAuth-токен должен быть передан в заголовке запроса Authorization
с типом Bearer.
Метод возвращает 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 документации.