Liferay DXP Soy portlet系列(三 )使用Service Builder创建 JSON Web Service

本文中会讨论如何基于Service Builder服务创建一个json web service

相关知识: Service Builder,JSON Web Service

当我们需要创建一个json web service的时候,我们可以利用Service Builder来创建这个服务
之前我们有一篇文章讨论了如何在IDE中使用Servicce Builder。

我们先了解一下相关需求:
我需要创建一个交易信息跟踪系统,来跟踪每个月的交易额。
我需要创建一个web service来传递银行月交易额的json数据。

第一步:定义数据实体和服务

首先我们需要用Service Builder创建一个实体和服务。之前我们有文章讨论过这些。

这次我们的项目叫做"monthly-trading"。
在service.xml中定义实体。注意,我将remote-service设置为"true"。
<?xml version="1.0"?>
<!DOCTYPE service-builder PUBLIC "-//Liferay//DTD Service Builder 7.0.0//EN" "http://www.liferay.com/dtd/liferay-service-builder_7_0_0.dtd">

<service-builder package-path="monthly.trading">
 <namespace>Banking</namespace>
 
 <entity local-service="true" name="MonthlyTrading" remote-service="true" uuid="true">

  <!-- PK fields -->

  <column name="monthlyTradingId" primary="true" type="long" />

  <!-- Group instance -->

  <column name="groupId" type="long" />

  <!-- Audit fields -->

  <column name="companyId" type="long" />
  <column name="userId" type="long" />
  <column name="userName" type="String" />
  <column name="createDate" type="Date" />
  <column name="modifiedDate" type="Date" />

  <!-- Other fields -->

  <column name="year" type="int" />
  <column name="month" type="int" />
  <column name="volume" type="int" />

  <!-- Order -->

  <order by="asc">
   <order-column name="month" />
  </order>

  <!-- Finder methods -->

  <finder name="Year" return-type="Collection">
   <finder-column name="year" />
  </finder>

 </entity>
</service-builder>


第二步,创建服务
当定义之后,可以运行buildService任务来创建服务。

在所有接口和实现类生成之后,可以在LocalServiceImpl类中添加你自己的服务实现逻辑。
在我们的例子中,我仅是在MonthlyTradingLocalServiceImpl类中添加了一个简单的方法,没有任何验证。

public MonthlyTrading addMonthlyTrading(int year, int month, int volume) {

  long pk = counterLocalService.increment();
  MonthlyTrading monthlyTrading = monthlyTradingPersistence.create(pk);
  monthlyTrading.setYear(year);
  monthlyTrading.setMonth(month);
  monthlyTrading.setVolume(volume);

  return monthlyTradingPersistence.update(monthlyTrading);

 }

 public List<MonthlyTrading> getMonthlyTradingByYear(int year) {
  return monthlyTradingPersistence.findByYear(year);
 }
重新运行buildService来更新接口。

接下来需要修改ServiceImpl类,来调用LocalService.
@JSONWebService
 public MonthlyTrading addMonthlyTrading(int year, int month, int volume) {

  return monthlyTradingLocalService.addMonthlyTrading(year, month, volume);
 }

 @JSONWebService
 public List<MonthlyTrading> getMonthlyTradingByYear(int year) {
  return monthlyTradingLocalService.getMonthlyTradingByYear(year);
 }

重新运行buildSerivce然后部署。

最佳实践:
最好在所有的远程服务实现中检查用户的权限,这样可以保证运行的用户有权限执行操作。

第三步:使用远程服务
接下来,在浏览器中进入http://localhost:8080/api/jsonws
在Context中选择“banking”

然后就可以看到我们自定义的json web service了。
Liferay DXP Soy portlet系列(三 )使用Service Builder创建 JSON Web Service

在运行服务后,可以看到如何调用服务的JavaScript, curl, URL的例子。
Liferay DXP Soy portlet系列(三 )使用Service Builder创建 JSON Web Service

这样就成功地通过Serive Builder添加了一个JSON Web Service。

希望你喜欢。

在接下来的教程中我们会使用Soy JS调用这个服务。