我需要扩展现有的Liferay网络服务(使用Service Builder创建)来处理额外的可选参数。
使用Service Builder,您必须指定方法签名中的每个参数:
public String getList(String param1){ .. }
这将创建一个get-list
Web服务,接受名为param1
的参数。您必须在拨打电话时指定每个参数,否则呼叫将失败。如果需要可选参数,只需传递一个空值并处理代码中缺少的参数。
我的问题是向后兼容性:此网络服务已被移动应用使用,我无法更改应用程序的调用。必须在不更改方法签名的情况下处理附加参数。
看一下BaseServiceImpl,我试图以这种方式获取参数:
HttpServletRequest request = com.liferay.util.axis.ServletUtil.getRequest();
String value = ParamUtil.getString(request, "param-name");
但它会针对NoClassDefException
投出com.liferay.util.axis.ServletUtil
。
有没有办法真正做到这一点?
答案 0 :(得分:1)
为了增强和保持代码的向后兼容性,一种方法是重载接受附加参数的getList()
方法。
您可以通过以下方式实现此目的:
getList()
移至getList(String param1)
方法。param1
中为getList(String param1)
添加过滤器,以处理参数不为空/空的情况。getList(null)
致电getList()
。 虽然您可以在需要传递其他参数时直接致电getList(String param1)
。
原始方法:
public String getList(){
return getList(null);
}
Overriden方法:
public String getList(String param1){
if(param1 != null){
// logic for param1
}
// rest of your general code
}