使用可选参数构建Liferay Web服务

时间:2015-06-10 17:05:50

标签: java web-services liferay liferay-service-builder

我需要扩展现有的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

有没有办法真正做到这一点?

1 个答案:

答案 0 :(得分:1)

为了增强和保持代码的向后兼容性,一种方法是重载接受附加参数的getList()方法。 您可以通过以下方式实现此目的:

  1. 将您的常规逻辑前代码getList()移至getList(String param1)方法。
  2. param1中为getList(String param1)添加过滤器,以处理参数不为空/空的情况。
  3. getList(null)致电getList()
  4. 虽然您可以在需要传递其他参数时直接致电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
    }