这可能是一个非常愚蠢/简单的问题,有一个明显的答案,似乎不值得在restlet文档中说明。 Restlet如何以及如何(如果有的话)将参数传递给ServerResource类中的方法?
鉴于此课程:
public class FooServerResource extends ServerResource {
@Get
public String foo(String f) {
return f;
}
}
和路由器附件router.attach("/foo", FooServerResource.class);
我知道如果我使用Restlet客户端连接器,我可以为这个类创建一个代理并直接调用方法,但如果我从其他非java语言调用此ServerResource,例如, PHP?
答案 0 :(得分:8)
您可以使用资源引用访问查询参数。通常,这样的事情:
@Get
public String foo() {
Form queryParams = getReference().getQueryAsForm();
String f = queryParams.getFirstValue("f");
return f;
}
一般来说(这适用于GET
)的其他方法,您可以使用getRequest()
内的ServerResource
访问传递给请求的任何内容(包括适当的实体) }。
答案 1 :(得分:1)
你好这个问题大概是一岁,但我刚开始使用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类中的方法(仍然在资源类中),请检查reflection关于此...
Method cbMethod = app.getClass().getMethod("getFoo", parameterTypes) ;
CallbackIntf getmethodFoo = ( CallbackIntf )cbMethod.invoke( app, arguments );
String str = getmethodFoo()
在我的应用程序中,我使用此机制来访问observer,该{{3}}将接收的数据提供给业务逻辑的类。这种方法是我所有资源类的标准,使它们非常统一,标准化和小 所以...我只是希望这是有用的,而且有{not / some}方式以更简单的方式来实现它:)