3.9.11.9. 调用服务方法(GET)

假设系统中存在 OrderService 服务。实现如下:

  1. package com.company.sales.service;
  2. import com.haulmont.cuba.core.EntityManager;
  3. import com.haulmont.cuba.core.Persistence;
  4. import com.haulmont.cuba.core.Transaction;
  5. import org.springframework.stereotype.Service;
  6. import javax.inject.Inject;
  7. import java.math.BigDecimal;
  8. @Service(OrderService.NAME)
  9. public class OrderServiceBean implements OrderService {
  10. @Inject
  11. private Persistence persistence;
  12. @Override
  13. public BigDecimal calculatePrice(String orderNumber) {
  14. BigDecimal orderPrice = null;
  15. try (Transaction tx = persistence.createTransaction()) {
  16. EntityManager em = persistence.getEntityManager();
  17. orderPrice = (BigDecimal) em.createQuery("select sum(oi.price) from sales$OrderItem oi where oi.order.number = :orderNumber")
  18. .setParameter("orderNumber", orderNumber)
  19. .getSingleResult();
  20. tx.commit();
  21. }
  22. return orderPrice;
  23. }
  24. }

在使用 REST API 执行之前,必须在配置文件中允许服务方法通过 REST 调用。需要在 web 模块的主包中创建 rest-services.xml 文件(例如 com.company.sales)。然后,必须在 web 模块的应用程序属性文件(web-app.properties)中定义该文件。

  1. cuba.rest.servicesConfig = +com/company/sales/rest-services.xml

rest-services.xml 内容:

  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. </service>
  8. </services>

要调用该服务的方法,可以执行以下 GET 请求:

http://localhost:8080/app/rest/v2/services/sales_OrderService/calculatePrice?orderNumber=00001

请求 URL 部分:

  • sales_OrderService - 服务名。

  • calculatePrice - 方法名。

  • orderNumber - 带有具体值的参数名称。

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

服务方法可以返回简单数据类型、实体、实体集合或可序列化 POJO 的结果。在我们的例子中返回 BigDecimal,因此响应体中只包含一个数字:

  1. 39.2