【发布时间】:2011-11-03 23:35:55
【问题描述】:
我正在尝试在基于 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 传递。顺便说一句,这个问题仍然是实际的,以防万一
【问题讨论】:
-
所以请求 确实 实际上会发送到您的
update方法(即通过使用PUT方法的映射正确路由)? -
好的,我只是排除了这可能是浏览器的问题和不常用的 PUT 方法。
-
戴夫,谢谢!是的,我已经将它们作为正文传递(因为它由 jQuery 实现)。我使用 PUT 只是因为我正在尝试制作有效的 REST API。在这种情况下您可以提出什么建议?
-
我可以使用 GET/POST,但它会是无效的 RESTful API。据我所知,PUT 是专门为此制作的,用于通过 url 更新现有对象。你可以阅读更多关于 RESTful ibm.com/developerworks/webservices/library/ws-restful
-
@DaveRandom,关于 POST 与 PUT 的好答案:stackoverflow.com/questions/630453/put-vs-post-in-rest