2015-06-10 88 views
0

的Liferay Web服務我需要擴展現有的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

有沒有辦法實際做到這一點?

回答

1

爲了增強和保持代碼的向後兼容性,一種方法是重載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 
} 
+0

這解決了我確切的問題,但我想知道:如果我需要更多的參數,它們應該是所有自選? – dipanda

+0

這是覆蓋和擴展方法的一般方法。根據您的要求,您可以添加重寫的方法,也可以更新參數(如果該方法未從衆多文件中調用)。 –