发送DELETE或PUT请求时springmvc获取参数为NULL

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("删除成功!");
	}
});


参考博客:http://blog.csdn.net/u012737182/article/details/52831008





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值