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

コードの下位互換性を強化して保持するための 1 つの方法は、getList()追加のパラメーターを受け入れるメソッドをオーバーロードすることです。これは、次の方法で実現できます。

  1. 一般的なプレロジック コードgetList()getList(String param1)メソッドに移動します。
  2. パラメーターが null / 空でない場合のケースを処理するparam1in のフィルターを追加します。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 に答える