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

Build Liferay web service with optional parameter

我需要扩展现有的 Liferay 网络服务(使用 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");

但是它抛出一个关于 com.liferay.util.axis.ServletUtilNoClassDefException

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

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

  1. getList()的通用前置逻辑代码移至getList(String param1)方法。
  2. getList(String param1) 中为 param1 添加过滤器以处理参数不为空/空的情况。
  3. getList() 呼叫 getList(null)

而需要传递额外参数时可以直接调用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
}