HiddenHttpMethodFilter的使用
(1)浏览器端的form表单只支持GET与POST这两个值,而不支持DELETE、PUT等,就算你硬要写成PUT它也识别不了,会默认用POST发送,
@RequestMapping(value="/emp/{id}",method=RequestMethod.PUT)
public String update(Employee employee){//.... }
那么当要请求springmvc中PUT类型的接口时,请求不到,该怎么解决呢?
可以用js,除了js,spring3提供啦HiddenHttpMethodFilter过滤器来解决这个问题。
第一步:在web.xml中配置过滤器
<!-- 配置可以把 POST 请求转为 PUT、DELETE 请求的 Filter -->
<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>
第二步:修改form表单
有两种做法都能达到效果:
用spring的form标签,可以直接修改method属性为PUT:
<form:form action="${url}" method="PUT" ">...<form:form>
用HTML的form标签,则在表单中添加隐藏域“_method“字段,后台都能接收:
<from method="PUT" ...>
<input type="hidden" name="_method" value="PUT"/>
</from>
HttpPutFormContentFilter的使用
浏览器端的form表单只支持GET与POST,而非浏览器客户端可是能发送PUT等其他类型的请求,而Servlet规范要求ServletRequest.getParameter *()系列方法只能获取POST请求的参数,怎么办?
装个过滤器:
第一步:在web.xml中配置过滤器
<!-- 支持PATCH、PUT请求: 此过滤器只能接受enctype值为application/x-www-form-urlencoded的表单 -->
<filter>
<filter-name>httpPutFormFilter</filter-name>
<filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>httpPutFormFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
第二步:发送接收
//后端代码
@RequestMapping(value="/emp/{id}",method=RequestMethod.PUT)
public String update(Employee employee){
//....
}
//前端代码
//注意:jquery发送ajax的PUT请求,有些浏览器课程不支持。
$.ajax({
url:"/emp/1",
type:"PUT",
data:{
id:1,
lastName:'zhoutian',
email:'123@qq.com',
birth:'2015-10-10',
},
success:function(result){
alert(result);
}
});
//如果不配置HttpPutFormContentFilter过滤器,Employee 对象只能接收到id值,因为id值是从路径上传递的。
===================================================================================
小说是否精彩,不是由开头决定的。