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 调用,因此我们添加一条记录到 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>
可以使用以下地址以 POST 请求调用 validateOrder
服务的方法:
http://localhost:8080/app/rest/v2/services/sales_OrderService/validateOrder
如果 POST 请求参数在请求体中传递。请求体必须包含一个 JSON 对象,此对象的每个字段对应于服务的方法参数。
{
"order" : {
"number": "00050",
"date" : "2016-01-01"
},
"validationDate": "2016-10-01"
}
必须将 OAuth 令牌放在带有 Bearer
类型的 Authorization
请求头中。
REST API 方法返回可序列化的 POJO:
{
"success": false,
"errorMessage": "Validation of order 00050 failed. validationDate parameter is: 2016-10-01"
}