[英]how to request another api as Client in ServerResource method in Restlet
[英]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.