Restlet路由器无法匹配我的网址请求

时间:2014-06-16 07:44:22

标签: url match router restlet

我有疑问。

当我向服务器请求某个URL时,服务器会收到URL请求。 (客户端:android)

例如,客户端请求网址为http://address:8182/signupUser

我绝对相信会调用signupUser方法。 (请在下面查看我的方法表格。)

@Post("signupUser")
public string XXXX(Representation entity){
..
}

当然,eclipse控制台中的服务器消息非常有用。

然而路由器调用其他方法“confirmUser”。

我很困惑。所有URI匹配都很完美。但是,路由器效果不佳。

请参考我目前的来源。

public class serverApplication extends Application {
    public Restlet createInboundRoot(){
        Router router = new Router(getContext());

        router.attach("/signupUser", UserResource.class);
        router.attach("/confirmUser", UserResource.class);
    }
}

实际上,我不熟悉英语。我希望我的问题能够完全传达给你。

请帮帮我....

1 个答案:

答案 0 :(得分:0)

基本上,您的示例代码将更好地工作如下:

@Post
public string XXXX(Representation entity){
..
}

@Post注释(或@Get等)不是路径路由指令的容器。 这是路由器的工作。

主要思想是:

  1. 通过路由器实例
  2. 定义您的路径和路径模板
  3. 因为资源是由其URI标识的,所以将每个istinct路径附加到一个不同的Java类。
  4. 更多想法:

    1. 路由器利用URI的分层特性。您可以在树中定义节点(节点是另一个路由器),并在路由器之前附加Filter,以便共享整个子树的行为。例如,您可以保护一组管理资源:

      路由器adminRouter =新路由器(getContext()); admin.attach(" /用户/&#34); admin.attach(" /用户/ {用户}&#34); //等

      //将adminRouter附加到/ admin根路径,并保护它 ChallengeAuthenticator guard =新的ChallengeAuthenticator(getContext(),ChallengeScheme.HTTP_BASIC," realm"); guard.setNext(adminRouter); //附加受保护的管理员路由器 rootRouter.attach(" / admin",guard);

    2. 例如:" / contacts / {contact}"表示代表单个联系人的资源"。 " /触点"代表联系人列表。从技术上讲,您可以附加相同的Java类(就像您在示例代码中所做的那样),但最终会得到复杂的代码。 ServerResource类实际上代表一个资源,并使用整套可接受的方法帮助处理其状态(GET用于检索状态,PUT用于存储它,DELETE用于删除它等)。

    3. 我希望这有点清楚。

      正如其他答案所指出的,注释接受媒体类型参数(也支持查询值)。我建议你看看这个页面:http://restlet.com/learn/guide/2.2/core/resource/