【问题标题】:Reading request data on RESTlet在 RESTlet 上读取请求数据
【发布时间】:2011-10-07 07:01:09
【问题描述】:

我正在尝试创建一个安静的服务,在服务器端使用 GAE 和 RESTlet,在客户端使用 jQuery。尽管 RESTlet 的文档非常糟糕,但我决心让自己熟悉一个宁静的框架。但是,我什至无法从中获得基本功能。

我遇到的问题是在 GET、POST、PUT 和 DELETE 之外,似乎只有 DELETE 请求会传递数据部分。

调用如下:

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

在服务器端,我在路由器上附加了一个资源,它是这样的:

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

以上四种情况,作为str,GET得到一个空参数(可以理解),PUT和POST得到空字符串,DELETE得到实际发送的数据。

我已经尝试过改变参数的类型(到表示或形式)和更具体的注释(例如@Get(“xml”))。目前没有成功。

欢迎任何建议。

【问题讨论】:

  • 您发送的“数据”的格式是什么???

标签: java javascript jquery google-app-engine restlet


【解决方案1】:

建议:使用文档更好的 ReST 框架。他们肯定在外面。例如,Jersey 非常容易启动和运行,并且它具有作为 JAX-RS 实现的好处,其中还有其他几个成熟的实现,一旦您学习了 API,就可以玩转。

【讨论】:

    【解决方案2】:

    所以,您正在尝试获取请求实体。我不确定标有@Put@Post 的方法是否应该像您期望的那样自动传入请求实体。我不确定为什么它适用于 DELETE 而不是其他人。不管怎样,试试下面的代码,看看你是否得到了什么。如果getEntityAsText() 仍然为空,则可能有其他事情发生。

    试试这个:

    @Put
    public String putit() {
       return this.getRequest().getEntityAsText();
    }
    

    【讨论】:

    • getRequest().getEntityAsText() 在 PUT 和 POST 中返回 null。 DELETE 再次起作用。此外,不带参数声明时,PUT 和 POST 不起作用(意味着浏览器没有响应)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    相关资源
    最近更新 更多