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了。
在运行服务后,可以看到如何调用服务的JavaScript, curl, URL的例子。
这样就成功地通过Serive Builder添加了一个JSON Web Service。
希望你喜欢。
在接下来的教程中我们会使用Soy JS调用这个服务。