新项目使用restful风格的编程方式,例student
get方法
/student 对应list查询
/student/{id} 对应id查询
post方法
/student 对应新增
put方法
/student 对应编辑
delete方法
/student 对应批量删除
/student/{id} 对应指定id删除
结果发现使用put与delete方法是,后台接受不到参数,解决方法如下:
在web.xml中新增过滤器
<filter>
<!--该过滤器用于处理post请求转换为标准的delete与put请求 -->
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<!--servlet为springMvc的servlet名 -->
<servlet-name>springMVC</servlet-name>
</filter-mapping>
该过滤器的核心方法如下:
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
String paramValue = request.getParameter(this.methodParam);
if ("POST".equals(request.getMethod()) && StringUtils.hasLength(paramValue)) {
String method = paramValue.toUpperCase(Locale.ENGLISH);
HttpServletRequest wrapper = new HttpMethodRequestWrapper(request, method);
filterChain.doFilter(wrapper, response);
}
else {
filterChain.doFilter(request, response);
}
}
将post方法转换为标准的put或者delete方法
前端ajax访问时实例代码如下:
$.ajax({
type : "POST",
url : "student",
dataType : "json",
async : false,
data : {
provinceIds : array,
//该参数指定后台接受方法类型,put/delete
_method : "delete",
},
success : function(data) {
});
后台接受方法:
@RequestMapping(value="student",method = RequestMethod.DELETE, produces = {"text/javascript;charset=UTF-8"})
public String del(HttpServletRequest request, HttpServletResponse response)
{
return null;
}
===============================================================================================
2018.07.17修改
最近使用springboot开发项目,同样遇到了相似的问题,发现在springboot2.0 时 PutMapping注解已经可以正常直接获取参数,DeleteMapping注解使用 @RequestBody 前端传参使用 application/json 后台也可以获取参数