在SpringMVC中,编写REST风格的CRUD操作时,总共会用到四种请求,即GET,POST,PUT,DELETE。但是客户端浏览器只支持GET和POST两种请求。因此要将POST请求转化为PUT和DELETE请求。而超链接本身是GET请求,因此首先要将GET请求转化为POST请求。
1.超链接GET 转POST
通过JQuery 绑定鼠标单击事件,将通过表单POST形式提交
引入jquery.min.js,由于SpringMVC会将所有的请求都拦截下来,包括所有的静态资源请求。此时需要在SpringMVC配置文件中增以下内容
<!-- 静态资源交给默认的Servlet-->
<mvc:default-servlet-handler/>
<mvc:annotation-driven></mvc:annotation-driven>
<!--过滤静态资源-->
<mvc:resources location="/css/" mapping="/css/**" />
<mvc:resources location="/images/" mapping="/images/**" />
<mvc:resources location="/js/" mapping="/js/**" />
超链接的GET请求:
<a class="delete" href="${pageContext.request.contextPath}/user/ ${user.id}">Delete</a>
2.JS代码转化为POST表单提交
引入jquery.min.js
<script src="${pageContext.request.contextPath}/js/jquery-3.3.1.min.js"></script>
<script type="text/javascript">
$(function() {
$(".delete").click(function(){
var href=$(this).attr("href");
$(".delform").attr("action",href).submit();
return false;
});
});
</script>
3.将POST请求转化为DELETE,PUT请求
在转化之前,首先要在web.xml配置文件中,配置过滤器,HiddenHttpMethodFilter
HiddenHttpMethodFilter的工作原理是将jsp页面的form表单的method属性值在doFilterInternal方法中转化为标准的Http方法,即GET,、POST、 HEAD、OPTIONS、PUT、DELETE、TRACE,然后到Controller中找到对应的方法。
<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>
4.在超链接之前,提交一个表单,表单的method是POST,还有一个“hidden”类型的输入框,属性名必须是_method,否则经过过滤器时,GET请求不能转化成DELETE请求
扫描二维码关注公众号,回复:
6543756 查看本文章
<form class="delform" action="" method="POST">
<input type="hidden" name="_method" value="DELETE" >
</form>
5.处理DELETE请求
@RequestMapping(value="/user/{id}",method=RequestMethod.DELETE)
public String delete(@PathVariable("id") Integer id) {
userService.delete(id);
return "redirect:/users";
}