3.9.11.10. 调用服务方法(POST)

REST API 不仅可以执行具有简单数据类型参数的方法,还可以执行具有以下参数的方法:

  • 实体

  • 实体集合

  • 可序列化的 POJO

假设我们在上一节中创建的 OrderService 中添加一个新方法:

  1. @Override
  2. public OrderValidationResult validateOrder(Order order, Date validationDate){
  3. OrderValidationResult result=new OrderValidationResult();
  4. result.setSuccess(false);
  5. result.setErrorMessage("Validation of order "+order.getNumber()+" failed. validationDate parameter is: "+validationDate);
  6. return result;
  7. }

OrderValidationResult 类如下所示:

  1. package com.company.sales.service;
  2. import java.io.Serializable;
  3. public class OrderValidationResult implements Serializable {
  4. private boolean success;
  5. private String errorMessage;
  6. public boolean isSuccess() {
  7. return success;
  8. }
  9. public void setSuccess(boolean success) {
  10. this.success = success;
  11. }
  12. public String getErrorMessage() {
  13. return errorMessage;
  14. }
  15. public void setErrorMessage(String errorMessage) {
  16. this.errorMessage = errorMessage;
  17. }
  18. }

新方法在参数列表中有一个 Order 实体,并返回一个 POJO。

在使用 REST API 调用之前该方法必须允许 REST 调用,因此我们添加一条记录到 rest-services.xml 配置文件中(在 调用服务方法(GET) 中描述过)。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <services xmlns="http://schemas.haulmont.com/cuba/rest-services-v2.xsd">
  3. <service name="sales_OrderService">
  4. <method name="calculatePrice">
  5. <param name="orderNumber"/>
  6. </method>
  7. <method name="validateOrder">
  8. <param name="order"/>
  9. <param name="validationDate"/>
  10. </method>
  11. </service>
  12. </services>

可以使用以下地址以 POST 请求调用 validateOrder 服务的方法:

http://localhost:8080/app/rest/v2/services/sales_OrderService/validateOrder

如果 POST 请求参数在请求体中传递。请求体必须包含一个 JSON 对象,此对象的每个字段对应于服务的方法参数。

  1. {
  2. "order" : {
  3. "number": "00050",
  4. "date" : "2016-01-01"
  5. },
  6. "validationDate": "2016-10-01"
  7. }

必须将 OAuth 令牌放在带有 Bearer 类型的 Authorization 请求头中。

REST API 方法返回可序列化的 POJO:

  1. {
  2. "success": false,
  3. "errorMessage": "Validation of order 00050 failed. validationDate parameter is: 2016-10-01"
  4. }