簡體   English   中英

Restlet ServerResource方法參數?

[英]Restlet ServerResource method parameters?

這可能是一個非常愚蠢/簡單的問題,有一個明顯的答案,似乎不值得在restlet文檔中說明。 Restlet如何以及如何(如果有的話)將參數傳遞給ServerResource類中的方法?

鑒於此類:

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

和路由器附件router.attach("/foo", FooServerResource.class);

我知道如果我使用Restlet客戶端連接器,我可以為這個類創建一個代理並直接調用方法,但是如果我從其他非Java語言(如PHP)調用此ServerResource會怎樣?

您可以使用資源引用訪問查詢參數。 通常,這樣的事情:

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

一般來說(這適用於GET其他方法),您可以使用ServerResource getRequest()訪問傳遞給請求的任何內容(包括適當的實體getRequest()



這個問題大概是一歲,但我剛開始使用Restlet並且偶然發現了“同樣”的問題。 我說的是服務器,而不是客戶端(正如Bruno標記的那樣,最初的問題是混合服務器和客戶端部分)
我認為問題沒有得到完全解答。 例如,如果您更喜歡將Restlet資源與請求的語義處理(將業務邏輯與基礎結構分離)分開,則很可能需要一些參數,如Observer或回調,或者某些參數。 其他。 所以,正如我所看到的那樣,沒有參數可以傳輸到這個實例化過程中。 資源由每個請求的Restlet引擎實例化。 因此我發現無法直接傳遞參數(是否有一個?)

幸運的是,可以從資源類中訪問Restlet引擎的Application對象,從而也可以訪問創建組件,服務器等的類。

在資源類我有...... 像這樣

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()

在我的應用程序中,我使用此機制來訪問一個 ,該將接收到的數據提供給業務邏輯的類。 這種方法是我所有資源類的標准,它使它們非常統一,標准化和小。
所以...我只是希望這是有用的,並且有{not / some}方式以更簡單的方式來做:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM