Reading request data on RESTlet
I am trying to create a restful service, using GAE and RESTlet on the server side and jQuery on the client side. Dispite the very poor documentation on RESTlet, I am determined to familiarise myself with a restful framework. However, I can't even get the basic functionality out of it.
The problem I have is that out of GET, POST, PUT and DELETE, only DELETE requests appear to deliver the data part.
The calls are made like this:
function开发者_如何学C put() {
try {
$.ajax({
url : url,
type : "PUT", //Same for GET, POST and DELETE
data : data,
success : function(data) {
try {
$("#results").text(data);
} catch (e) {
alert(e);
}
}
});
} catch (e) {
alert(e);
}
}
On the server-side I have a resource attached on a router, and it goes like this:
public class TaskResource extends ServerResource
{
String userID = "jada";
@Override
public void doInit()
{
super.doInit();
userID = (String) getRequestAttributes().get("user");
}
@Get
public String toString(String str)
{
return "GET: task of " + userID + " ||| DATA: " + str;
}
@Put
public String putit(String str)
{
return "PUT: task of " + userID + " ||| DATA: " + str;
}
@Post
public String postit(String str)
{
return "POST: task of " + userID + " ||| DATA: " + str;
}
@Delete
public String deleteit(String str)
{
return "DELETE: task of " + userID + " ||| DATA: " + str;
}
}
In the four cases above, as str, GET gets a null argument (understandable), PUT and POST get empty strings and DELETE gets the data actually sent.
I have experimented with changing the type of the arguments (to Representation or Form) and with more specific annotations (e.g @Get("xml")). No success so far.
Any recommendations are welcome.
Recommendation: Use a better-documented ReST framework. They're definitely out there. Jersey, for example, is really easy to get up and running, and it has the benefit of being an implementation of JAX-RS, of which there are several other mature implementations that you can play around with once you learn the API.
So, you are trying to fetch the request entity. I'm not sure if methods marked with @Put
or @Post
should have the request entity automatically passed in like you are expecting. I'm not sure why it works for DELETE
though and not the others. Anyways, try the code below out and see if you get anything. If getEntityAsText()
still comes up empty, there is likely something else going on.
Try this out:
@Put
public String putit() {
return this.getRequest().getEntityAsText();
}
精彩评论