我需要通过json请求获取DDL记录。 Liferay核心没有这样的服务。只有getRecordSet。
我编写DDLRecordSetService Hook来添加新方法getRecords(recordSetId)
。
我的代码:
public class ExtDDLRecordSetLocalServiceImpl extends DDLRecordSetServiceWrapper {
public ExtDDLRecordSetLocalServiceImpl(DDLRecordSetService ddlRecordSetService) {
super(ddlRecordSetService);
}
public com.liferay.portlet.dynamicdatalists.model.DDLRecordSet getRecordSet(long recordSetId) throws com.liferay.portal.kernel.exception.PortalException, com.liferay.portal.kernel.exception.SystemException{
System.out.println("------override getRecordSet ");
DDLRecordSet set = super.getRecordSet(recordSetId+10);
return set;
}
@JSONWebService
public List<DDLRecord> getRecords(long recordSetId) throws SystemException, PortalException {
System.out.println("------override getRecords");
return getRecordSet(recordSetId).getRecords();
}
}
我可以覆盖getRecordSet(),但是我无法通过URL访问getRecordSet()方法。
我明白了:
{"exception":"No JSON web service action associated with path /ddlrecordset/get-records and method GET for /"}
如何添加可以通过JSONWebService返回记录集的新DDLRecordSetService?
答案 0 :(得分:1)
DDL内置的JSON服务比get-record-set更丰富。尝试将浏览器指向门户网站的Web服务API页面。登录后,
/ API / jsonws
DDLRecord有7种方法,DDLRecordSet有8种方法。
在我看来,标准API将满足您的需求。
如果事实证明是这样,那么......
运行服务构建器时会创建JSON Web服务方法。这反过来将您的方法设计为JSON,SOAP等正确的对象。
由于您从未运行过服务构建器,因此不会发生逆向工程。我怀疑为你的核心Liferay资源上的钩子运行SB是你的想法(无论如何,它都是不可取的,imo。)
我的建议是使用Service Builder创建自己的服务,从而为您要公开的服务对象创建自己的API。另请参阅this question