4

これはおそらく本当にばかげた/単純な質問であり、そのような明白な答えがあるので、レストレットのドキュメントで述べる価値はないようです。Restletはどこでどのように(もしあれば)ServerResourceクラスのメソッドにパラメーターを渡すことができますか?

このクラスを考えると:

public class FooServerResource extends ServerResource {
    @Get
    public String foo(String f) {
        return f;
    }
}

およびルーターアタッチメントrouter.attach("/foo", FooServerResource.class);

Restletクライアントコネクタを使用すると、このクラスのプロキシを作成してメソッドを直接呼び出すことができることはわかっていますが、PHPなどの他の非Java言語からこのServerResourceを呼び出す場合はどうなりますか?

4

2 に答える 2

8

リソースリファレンスからを使用して、クエリパラメータにアクセスできます。通常、次のようなものです。

@Get
public String foo() {
    Form queryParams = getReference().getQueryAsForm();
    String f = queryParams.getFirstValue("f");
    return f;
}

一般的に言えば(これは他のメソッドでも機能します)、内GETを使用してリクエストに渡されたもの(適切な場合はエンティティを含む)にアクセスできます。getRequest()ServerResource

于 2010-10-20T12:26:12.287 に答える
1

こんにちは

質問は約1歳ですが、私はRestletから始めて、「同じ」問題に遭遇しました。私はクライアントではなくサーバーについて話している(ブルーノがマークしたように、元の質問はサーバーとクライアントの部分が混在している)
質問は完全には答えられていないと思う。たとえば、Restletリソースをリクエストのセマンティック処理から分離する(ビジネスロジックをインフラストラクチャから分離する)場合は、オブザーバー、コールバック、またはsthなどのパラメーターが必要になる可能性があります。そうしないと。したがって、私が見ているように、このインスタンス化プロセスにパラメーターを送信することはできませんでした。リソースは、リクエストごとにRestletエンジンによってインスタンス化されます。したがって、パラメーターを直接渡す方法が見つかりませんでした(パラメーターはありますか?)

幸い、RestletエンジンのApplicationオブジェクトには、リソースクラス内からアクセスできます。したがって、コンポーネントを作成するクラスやサーバーなどにもアクセスできます。

リソースクラスにはsthがあります。このような

protected Application initObjLinkage(){

    Context cx = this.getContext();
    Client cli = cx.getClientDispatcher();
    Application app = cli.getApplication() ;
    return app;
}

その後、リフレクションとインターフェイスを使用して、Applicationクラス(まだリソースクラス内)のメソッドにアクセスできます。これについてを確認してください...

Method cbMethod = app.getClass().getMethod("getFoo", parameterTypes) ;
CallbackIntf getmethodFoo = ( CallbackIntf )cbMethod.invoke( app, arguments );
String str = getmethodFoo()

私のアプリケーションでは、このメカニズムを使用して、受信したデータをビジネスロジックのクラスに提供するこのアプローチは、私のすべてのリソースクラスの標準であり、非常に均一で、標準化され、小さくなっています。
だから...これがお役に立てば幸いです。もっと簡単な方法でそれを行う{no/some}方法があることを願っています:)

于 2011-10-23T10:09:46.133 に答える