5.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"
}
参数值必须按照对应 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
请求头中。
REST API 方法返回可序列化的 POJO:
{
"success": false,
"errorMessage": "Validation of order 00050 failed. validationDate parameter is: 2016-10-01"
}