$.ajax({
url:"${APP_PATH}/empError/"+1,
type:"PUT",
data:$("#empUpdateModal form").serialize(),
success:function(result){
alert(result.msg);
}
});
这是前台的ajax请求
@ResponseBody
@RequestMapping(value="/empError/{empId}",method=RequestMethod.PUT)
public Msg saveEmp(Employee employee) {
System.out.println(employee.toString());
employeeService.updateEmp(employee);
return Msg.success();
}
这是后台接收的代码
紧接着,前台发的请求,后台都显示为空。
原因:
Tomcat:
1、将请求体中的数据,封装一个map。
2、request.getParameter("empName")就会从这个map中取值。
3、SpringMVC封装POJO对象的时候。
会把POJO中每个属性的值,request.getParamter("email");
AJAX发送PUT请求引发的问题
PUT请求,请求体中的数据,request.getParameter("empName")拿不到
Tomcat一看是PUT不会封装请求体中的数据为map,只有POST形式的请求才封装请求体为map
可以添加了一个过滤器,可以将这些请求转换为标准的http方法,使得支持GET、POST、PUT与DELETE请求
在web.xml 添加过滤器
<!-- 使用Rest风格的URI,将页面普通的post请求转为指定的delete或者put请求 -->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>HttpPutFormContentFilter</filter-name>
<filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HttpPutFormContentFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
就可以了