4

这可能是一个非常愚蠢/简单的问题,答案如此明显,以至于似乎不值得在 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 怎么办?

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



,这个问题大约有一岁了,但我刚开始使用 Restlet 并偶然发现了“相同”的问题。我说的是服务器,而不是客户端(正如布鲁诺标记的那样,最初的问题是混合服务器和客户端部分)
我认为这个问题没有完全回答。例如,如果您更喜欢将 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()

在我的应用程序中,我使用这种机制来访问一个,该观察者将接收到的数据提供给业务逻辑的类。这种方法是我所有资源类的标准,它使它们非常统一、标准化和小。
所以...我只是希望这会有所帮助,并且有 {no/some} 方法可以以更简单的方式做到这一点:)

于 2011-10-23T10:09:46.133 回答