通过本文主要向大家介绍了等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
1. 情况描述:使用 $.aiax({}); 发送delete和put请求时,springmvc获取到的请求参数一直为null。
2.后台代码如下,可正常接受POST请求参数。
@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; }
3. 有问题的前端js代码 :
$.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:
<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>
注意:servlet-name中的值必须时springmvc的对应的servlet名称
② AJAX请求参数中必须带上如下键值对:_method=delete/put
data : {"_method":"delete","name":"mercy","age":22}
③ AJAX请求类型必须是POST
type : "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("删除成功!"); } });