刚开始使用带有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;
}
但我不确定资源是什么?它在我的程序中不存在,我不确定它需要什么类型或在哪里声明它。
答案 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?了解类似方法。