开发者

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();
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜