傳送DELETE或PUT請求時springmvc獲取引數為NULL
阿新 • • 發佈:2019-02-08
1. 情況描述:使用 $.aiax({}); 傳送delete和put請求時,springmvc獲取到的請求引數一直為null。
2.後臺程式碼如下,可正常接受POST請求引數。
3. 有問題的前端js程式碼 :@RequestMapping(value="/Database/{id}",method=RequestMethod.DELETE) @ResponseBody public String deleteDatabase(@PathVariable(name="id",required=true)Integer id, @RequestParam(value="name",required=false) String name, @RequestParam(value="age",required=false) Integer age ) { System.out.println(id+"--"+name+"--"+age); String result = "0"; return result; }
$.ajax({
url : "${ctp}/DatabaseOperate/Database/"+node.id,
type : "delete",
data : {"name":"mercy","age":22},
dataType : "json",
success : function(data){
console.log(data);
}
});
在上述程式碼情況下,id可以正常獲取到,但name和age一直是null。用chrome監聽請求,請求方式確實是DELETE,也攜帶了請求引數(Form Data形式),但後臺獲取的name和age就是null。
4. 原因:當在$.aiax ({});直接設定type為delete或put時,請求會到達springmvc控制器,但是無法獲取傳過來的引數。
解決方式:將post請求轉換為delete或put請求,這樣後臺就可以正常獲取到傳過來的請求引數。
① 在web.xml配置檔案中新增一個將post請求轉換為delete或put請求的filter:
注意:servlet-name中的值必須時springmvc的對應的servlet名稱<filter> <filter-name>HiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping> <filter-name>HiddenHttpMethodFilter</filter-name> <servlet-name>springDispatcherServlet</servlet-name> </filter-mapping>
② AJAX請求引數中必須帶上如下鍵值對:_method=delete/put
data : {"_method":"delete","name":"mercy","age":22}
③ AJAX請求型別必須是POSTtype : "post"
5.正確完整前端程式碼
$.ajax({
url : "${ctp}/DatabaseOperate/Database/"+node.id,
type : "post",
data : {"_method":"delete","name":"mercy","age":22},
dataType : "json",
success : function(data){
console.log(data);
layer.msg("刪除成功!");
}
});
參考部落格:http://blog.csdn.net/u012737182/article/details/52831008