我正在尝试将带有PUT的参数从JavaScript发送到Spring应用程序。这是Spring Controller中的@RequestMapping:
@RequestMapping(value = "toggle-paid-action", method = RequestMethod.PUT)
@ResponseBody
public final String togglePaid(@RequestParam final int year,
@RequestParam final String docType, @RequestParam final int number) {
这里是应该发送这些参数的JavaScript代码段。
Ext.Ajax.request({
params: {year: year, docType: docType, number: number},
url: 'toggle-paid-action',
method: 'PUT',
但是,我每次都会收到“400 Bad Request”描述“客户端发送的请求在语法上不正确()”。
如果我查看Firebug,就会有一个带有我所有参数的PUT选项卡,并且参数拼写正确,因为如果我从PUT切换到POST两端都可以正常工作。
我想知道可能出现什么问题,PUT是否仅限于@PathVariable参数,还是可以发送类似POST的参数?
答案 0 :(得分:2)
我认为你不能使用请求方法PUT将参数传递给spring,因为servlet API中存在限制。您只能使用实现restful服务的PUT方法,将数据作为请求主体传递,在其他情况下(如Spring MVC Databinding)PUT将无法工作。 见SpringMVC is not recognizing request body parameters if using PUT
答案 1 :(得分:0)
如上所述,这似乎是spring/servlet API
中的错误。实际上,PUT
请求应该在Request Body (or payload)
上工作,而不是在请求参数上。从这个意义上讲,servlet API&春天的处理是正确的。
话虽如此,更好,更简单的解决方法是从javascript/jQuery
调用中传递数据元素,并将您的参数作为网址本身的一部分传递。意思是,在网址字段中设置参数,就像在GET
调用中一样。
$.ajax({
url: "yoururl" + "?param1=param2Val&..",
type: "PUT",
data: "",
success: function(response) {
// ....
}
});
现在这适用于简单的参数,我猜,它不适用于复杂的JSON类型。希望这可以帮助。