[英]Spring and ExtJS “400 Bad Request” with PUT but not with POST
我正在嘗試將帶有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的參數?
我想你不能使用請求方法PUT將參數傳遞給spring,因為servlet API中存在限制。 您只能使用PUT方法實現一個restful服務,將數據作為請求體傳遞,在其他情況下(如Spring MVC Databinding)PUT將不起作用。 如果使用PUT,請參閱SpringMVC無法識別請求體參數
如上所述,這似乎是spring/servlet API
一個錯誤。 實際上, PUT
請求應該在Request Body (or payload)
上工作,而不是在Request Parameters上工作。 從這個意義上說,servlet API和spring的處理是正確的。
話雖如此,更好,更簡單的解決方法是從javascript/jQuery
調用中傳遞數據元素,並將您的參數作為url本身的一部分傳遞。 意思是,在網址字段中設置參數,就像在GET
調用中一樣。
$.ajax({
url: "yoururl" + "?param1=param2Val&..",
type: "PUT",
data: "",
success: function(response) {
// ....
}
});
現在這適用於簡單的參數,我猜,它不適用於復雜的JSON類型。 希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.