Restlet ServerResource方法参数?

时间:2010-10-20 11:51:48

标签: java restlet

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

2 个答案:

答案 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类中的方法(仍然在资源类中),请检查关于此...

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

在我的应用程序中,我使用此机制来访问,该{{3}}将接收的数据提供给业务逻辑的类。这种方法是我所有资源类的标准,使它们非常统一,标准化和小 所以...我只是希望这是有用的,而且有{not / some}方式以更简单的方式来实现它:)