使用可选参数构建 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.ServletUtil
的 NoClassDefException
。
有没有办法真正做到这一点?
要增强和保持代码的向后兼容性,一种方法是重载接受附加参数的 getList()
方法。
您可以通过以下方式实现此目的:
- 将
getList()
的通用前置逻辑代码移至getList(String param1)
方法。
- 在
getList(String param1)
中为 param1
添加过滤器以处理参数不为空/空的情况。
- 从
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
}
我需要扩展现有的 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.ServletUtil
的 NoClassDefException
。
有没有办法真正做到这一点?
要增强和保持代码的向后兼容性,一种方法是重载接受附加参数的 getList()
方法。
您可以通过以下方式实现此目的:
- 将
getList()
的通用前置逻辑代码移至getList(String param1)
方法。 - 在
getList(String param1)
中为param1
添加过滤器以处理参数不为空/空的情况。 - 从
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
}