请求参数和PUT方法

伊戈尔·阿尔塔莫诺夫(Igor Artamonov):

我正在尝试在基于Grails的应用程序中通过PUT请求传递请求参数。

我正在使用以下客户端代码发出请求:

$.ajax({
    url: 'api/controllerName/anId',
    type: 'PUT',
    data: $('form').serialize()
})

具有以下映射:

"/api/$controller/$id?" {
    action = [ GET: "read", POST: "create", PUT: "update", DELETE: "delete"]
}

但是我的控制器的动作接收到空的参数列表,只有id值。我试图将其内容放入日志并仅看到:

[id:anId, action:[GET:read, POST:create, PUT:update, DELETE:delete], controller:controllerName]

request.getParameterNames()返回空值列表。

从FireBug中可以看到,请求包含此参数,并具有Content-Type作为 application/x-www-form-urlencoded; charset=UTF-8

如果我使用的是GET / POST方法-一切都按预期进行,则可以获取所有传递的参数。

如何获得对传递的参数的访问权限?

更新:我刚刚发现PUT意味着将数据作为JSON / XML传递到正文中。顺便说一句,这个问题仍然是现实的,以防万一

吹牛:

我今天遇到了完全相同的问题,并且能够解决它。我使用JQuery向Grails RESTful WebService发出了ajax请求(方法:“ PUT”),但是参数映射为空。

只想在这里分享我的解决方案。

我必须对数据进行JSON.stringify,并将contentType设置为“ application / json”,然后在Grails控制器中使用request.JSON(如之前所建议)。

示例(JQuery Ajax请求):

$.ajax({
        url: "/entries/" + id,
        contentType: "application/json",
        type: "PUT",
        dataType: "json",
        data: JSON.stringify({'name' : name, 'date': date}),
        success: function(msg) {
            console.log('updated...')
            $.mobile.changePage($('#list'));
        }

之后,我可以使用:

request.JSON

在我的Controller中以获取由ajax请求发送的数据(参数仍然为空)。如果我不使用JSON.stringify并设置内容类型,则会出现以下Grails错误:

Error 2012-04-03 13:50:20,046 [http-bio-8080-exec-3] ERROR errors.GrailsExceptionResolver  - IllegalStateException occurred when processing request: [PUT] /entries/2
getReader() has already been called for this request. Stacktrace follows:
Message: getReader() has already been called for this request

我正在使用Grails 2.0.1和JQuery 1.7.1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章