3.9.11.10. Вызов метода сервиса (POST)
REST API позволяет выполнять методы сервисов, аргументами которых являются не только простые типы, но также:
-
сущности
-
коллекции сущностей
-
произвольные сериализуемые POJO
Небольшой пример. Предположим, в сервис OrderService
, созданный в предыдущем разделе, добавлен следующий метод:
@Override
public OrderValidationResult validateOrder(Order order, Date validationDate){
OrderValidationResult result=new OrderValidationResult();
result.setSuccess(false);
result.setErrorMessage("Validation of order "+order.getNumber()+" failed. validationDate parameter is: "+validationDate);
return result;
}
Класс OrderValidationResult
выглядит следующим образом:
package com.company.sales.service;
import java.io.Serializable;
public class OrderValidationResult implements Serializable {
private boolean success;
private String errorMessage;
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public String getErrorMessage() {
return errorMessage;
}
public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}
}
Новый метод сервиса принимает сущность Order
в качестве первого аргумента и возвращает POJO.
Перед вызовом данного метода с помощью REST API необходимо разрешить его, добавив запись в конфигурационный файл rest-services.xml
(его создание было рассмотрено в Вызов метода сервиса (GET)):
<?xml version="1.0" encoding="UTF-8"?>
<services xmlns="http://schemas.haulmont.com/cuba/rest-services-v2.xsd">
<service name="sales_OrderService">
<method name="calculatePrice">
<param name="orderNumber"/>
</method>
<method name="validateOrder">
<param name="order"/>
<param name="validationDate"/>
</method>
</service>
</services>
Метод validateOrder
сервиса вызывается POST запросом по адресу:
http://localhost:8080/app/rest/v2/services/sales_OrderService/validateOrder
Параметры в случае POST передаются в теле запроса в JSON объекте. Каждое поле JSON объекта соответствует аргументу метода сервиса:
{
"order" : {
"number": "00050",
"date" : "2016-01-01"
},
"validationDate": "2016-10-01"
}
Значение параметра должно быть передано в формате, определённого для соответствующего datatype. Например:
-
если тип параметра
java.util.Date
, то формат значения берётся изDateTimeDatatype
. По умолчанию этоyyyy-MM-dd HH:mm:ss.SSS
-
для типа параметра
java.sql.Date
формат значения берётся изDateDatatype
(по умолчаниюyyyy-MM-dd
) -
для
java.sql.Time
соответствующим datatype являетсяTimeDatatype
, значение по умолчанию:HH:mm:ss
OAuth-токен должен быть передан в заголовке запроса Authorization
с типом Bearer.
Метод вернет сериализованный POJO:
{
"success": false,
"errorMessage": "Validation of order 00050 failed. validationDate parameter is: 2016-10-01"
}