时间:2021-07-01 10:21:17 帮助过:47人阅读
近日在之前项目修改接口,使用resutful,使用delete方法传参后台一直接收不到,查阅相关资料发现,springmvc对于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>
相关解释为springmvc不支持put,delete请求传参,过滤器的核心代码如下
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({
type : "POST",
url : "demo",
dataType : "json",
async : false,
data : {
provinceIds : id,
//该参数指定后台接受方法类型,put/delete
_method : "delete",
},
success : function(data) {
});后台方法
@RequestMapping(value = "/demo",method = RequestMethod.DELETE)
@ResponseBody
public Map demo(HttpServletRequest request, HttpServletResponse response,Integer id){
return null;
}需要注意的是,只有context-type:application/x-www-form-urlencoded的请求才会被过滤。
参考: 以上就是spring mvc使用put,delete方法实现传参问题的详细内容,更多请关注Gxl网其它相关文章!