簡體   English   中英

彈簧和ExtJS“400錯誤請求”與PUT但不與POST

[英]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無法識別請求體參數

JIRA: https//jira.springsource.org/browse/SPR-7414

如上所述,這似乎是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM