Restlet, An example of a get with parameters

一曲冷凌霜 提交于 2020-01-02 21:59:10

问题


Just startred using restlet with java and was pleasently surprised how easy it was. However this was with puts. I then started to work with get but couldn't work out how to pass infromation with the get.

With the put it was easy as:

@Put
public Boolean store(Contact contact);

But when i try and do this with get it doesnt work. From reading around i think i have to not pass it any parameters and just have this:

@Get
public Contact retrieve();

and then pass the parameters in a url or something? But i cant find any info on how to do this. As with put i could just use:

resource.store(user1);

Any help please?

Im pretty sure this is the kind of thing i just need to see an example of and then ill be able to do it easily. Example of how to get the infromation out of the url at the other side would be very helpful aswell.

Thanks

I now have on my client side:

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

On the server side i have:

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

But i am not sure what resource is? It doesnt exist in my program and am not sure what type it needs to be or where to declare it.


回答1:


A good approach with REST is to specify this contact id within the URI. Something like that: /contacts/mycontactid.

When attaching your resources within the application class, you can define this segment as an attribute (the contact id one in your case).

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;
    }
}

Then you can have the code provided by Richard in his answer.

Hope it helps you. Thierry




回答2:


I no this question was asked along time ago but the answer I think you are looking for is:

Application Code

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;
    }
}

Resource Code

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

The (String)this.getRequestAttributes().get("user"); allows you extract details from the URL.

Hope this helps




回答3:


It seems that what you are looking for is something like:

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;
}

Also see: how to pass parameters to RESTlet webservice from android? for a similar approach.



来源:https://stackoverflow.com/questions/14608932/restlet-an-example-of-a-get-with-parameters

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!