0

我需要扩展现有的 Liferay Web 服务(使用Service Builder创建)来处理额外的可选参数。

使用 Service Builder,您必须在方法签名中指定每个参数:

public String getList(String param1){ .. }

这将创建一个get-list接受名为 的参数的 Web 服务param1。调用时必须指定每个参数,否则调用将失败。如果您需要可选参数,只需传递一个空值并在代码中处理缺少的参数。

我的问题是向后兼容性:此 Web 服务已被移动应用程序使用,我无法更改应用程序发出的调用。必须在不更改方法签名的情况下处理附加参数。

看一下BaseServiceImpl,我尝试以这种方式获取参数:

HttpServletRequest request = com.liferay.util.axis.ServletUtil.getRequest();
String value = ParamUtil.getString(request, "param-name");

但它引发了一个NoClassDefException关于com.liferay.util.axis.ServletUtil.

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

4

1 回答 1

1

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

  1. 将您的一般预逻辑代码移动getList()getList(String param1)方法。
  2. 当参数不为空/为空时,为 in 添加过滤器以处理param1情况。getList(String param1)
  3. getList(null)从调用getList()

getList(String param1)当您需要传递附加参数时,您可以直接调用。

原始方法:

public String getList(){
    return getList(null);
}

重写方法:

public String getList(String param1){

    if(param1 != null){
        // logic for param1
    }

    // rest of your general code
}
于 2015-06-11T05:37:54.177 回答