您的位置:首页 > 编程语言 > Java开发

springMVC使用PUT、DELETE方法传递参数解决方案

2016-10-11 16:55 513 查看
新项目使用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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: