Restlet,带参数的get示例

时间:2013-01-30 16:31:25

标签: java parameter-passing restlet restful-url

刚开始使用带有java的restlet,并且非常惊讶它是多么容易。然而这是看跌期权。然后我开始使用get但无法解决如何通过get传递信息。

随着这个很简单:

@Put
public Boolean store(Contact contact);

但是,当我尝试这样做时,它不起作用。从阅读周围我认为我不得传递任何参数,只是有这个:

@Get
public Contact retrieve();

然后在url或其他东西中传递参数? 但我无法找到有关如何执行此操作的任何信息。和put一样,我可以使用:

resource.store(user1);

请帮忙吗?

我很确定这是我需要看到的一个例子,然后很容易就能做到这一点。如何从另一侧的URL获取信息的示例将非常有用。

由于

我现在在我的客户端:

String username = "tom";
ClientResource cr2 = new ClientResource("http://.../ContactManager/contacts/" + username);
ContactResource resource2 = cr2.wrap(ContactResource.class);
resource2.logIn();

在服务器端,我有:

@Get
public Contact logIn(){
    System.out.println("name is " + resource.getAttributes().get("contactId"));     
    return null;
}

但我不确定资源是什么?它在我的程序中不存在,我不确定它需要什么类型或在哪里声明它。

3 个答案:

答案 0 :(得分:2)

使用REST的一个好方法是在URI中指定此联系人ID。这样的事情:/ contacts / mycontactid。

在应用程序类中附加资源时,可以将此段定义为属性(在您的情况下为联系人ID)。

public class ContactsApplication extends Application {
    public Restlet createInboundRoot() {
        Router router = new Router(getContext());
        router.attach("/contacts/", ContactsServerResource.class);
        router.attach("/contacts/{contactId}", ContactServerResource.class);
        return router;
    }
}

然后你可以在他的回答中提供理查德提供的代码。

希望它对你有所帮助。 亨利

答案 1 :(得分:1)

我之前没有问过这个问题,但我认为您正在寻找的答案是:

申请代码

public class ContactsApplication extends Application {
    public Restlet createInboundRoot() {
        Router router = new Router(getContext());
        router.attach("/user/", ContactsServerResource.class);
        router.attach("/user/{user}", ContactServerResource.class);
        return router;
    }
}

资源代码

@Get
public void login() 
String userName = (String)this.getRequestAttributes().get("user");

(String)this.getRequestAttributes().get("user");允许您从网址中提取详细信息。

希望这有帮助

答案 2 :(得分:0)

您正在寻找的东西似乎是:

public final Representation get() {
  String contactId = request.getAttributes().get("contactId"));
  // Find the Contact object with that id
  JacksonRepresentation<Contact> result = 
    new JacksonRepresentation<Contact>(contact);
  return result;
}

另请参阅:how to pass parameters to RESTlet webservice from android?了解类似方法。