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"
}