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

来源:互联网 发布:绘画软件ipad 编辑:程序博客网 时间:2024/05/21 21:37

新项目使用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;}







0 0