java中put是什么意思_关于java:请求参数和PUT方法

我正在尝试在基于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方法的关系。

您实际上要在这里做什么需要PUT?您如何尝试传递参数?作为Request-URI的一部分(如GET)还是正文(如POST)?查看您所说的Content-Type标头,该标头在正文中传输-这实际上不是PUT方法的有效用法(也不会在Request-URI中传递它们)。为什么不仅仅使用GET或POST?

戴夫,谢谢!是的,香港专业教育学院将它们作为主体传递(由jQuery实现)。我使用PUT只是因为我试图制作有效的REST API。在这种情况下您有什么建议?

虽然我将第一个承认我不是完全是RESTful开发人员,但我不明白为什么您不能仅获取或发布数据...什么是数据,什么是使PUT成为最佳选择的制约因素?

我可以使用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

我今天遇到了完全相同的问题,并且能够解决它。 我使用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

在我的控制器中,以获取由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

老兄,@ mburri youre很棒。 我遇到了完全相同的问题,我不得不使用POST进行更新,这使我烦恼了。 有趣的是,当我执行PUT时,不需要客户端上的" contentType:application / json"。 request.JSON仍然包含数据。 但是当我执行POST时,需要" contentType:application / json"。 但是,当然,它始终是陈述您发送的内容的最佳做法。 非常感谢!

+1对于PUT,必须同时使用contentType和stringify(),谢谢您的回答!

我想知道这是否是Jquery + grails问题,因为当我使用curl而不是jquery进行测试时,grails方面工作正常。

尝试使用request.JSON(或request.XML)而不是params。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值