在学习SpringMVC的时候,基于REST风格的代码在方便我们开发的同时,也带来了许多的坑。最典型的坑就是在写基于Springmvc CRUD的更新操作时,前台表单通过POST请求提交数据给后台,后台基于REST风格的代码是需要接受PUT请求的,所以不处理POST请求转变为PUT请求,后台控制器会出现null值的情况。下面总结一下将POST请求转化为PUT请求的解决方案。
1)借助HiddenHttpMethodFilter,来讲POST请求转化为PUT请求
在web.xml中添加HiddenHttpMethodFilter
<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表单中,只需要添加如下关键代码,即可通过HiddenHttpMethodFilter来讲POST请求转化为PUT请求,即可满足基于REST风格的URI。
<input type="hidden" name="_method" value="PUT"/>后台代码控制器中,就可避免出现null值的问题了。
@RequestMapping(value="/xxx", method=RequestMethod.PUT)
public String update(Vo vo){
...
return "xxx";
}2)(使用jquery的ajax请求)type为post
在ajax请求中,可以这样将POST请求转化为PUT请求,这一转化过程还是要借助于HiddenHttpMethodFilter。
$.ajax({
url:xxx,
type:"POST",
data:xxx+"&_method=PUT",
success:function(result){
xxx
}
}); 3)(使用jquery的ajax请求)type为put
需要使用新的filter;在web.xml中添加如下filter:
<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>$.ajax({
url:xxx,
type:"PUT",
data:xxx,
success:function(result){
xxx
}
});
本文介绍了解决SpringMVC REST风格下POST请求与PUT请求不匹配的问题。提供了三种方法:使用HiddenHttpMethodFilter过滤器配合前端表单修改请求类型、利用jQuery AJAX发送带转换的POST请求及采用新的过滤器支持直接发送PUT请求。
1921

被折叠的 条评论
为什么被折叠?



