SpringBoot2之PUT请求接收不了参数如何解决
导读:本文共1943.5字符,通常情况下阅读需要6分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: HiddenHttpMethodFilterhtml中form表单只支持GET与POST请求,而DELETE、PUT等method并不支持,spring3添加了一个过滤器,可以将这些请求转换为标准的http方法,使得支持GET、POST、PUT与DELETE请求。@BeanpublicFilterRegistrationBean<HiddenHttpMe... ...
目录
(为您整理了一些要点),点击可以直达。HiddenHttpMethodFilter
html中form表单只支持GET与POST请求,而DELETE、PUT等method并不支持,spring3添加了一个过滤器,可以将这些请求转换为标准的http方法,使得支持GET、POST、PUT与DELETE请求。
@BeanpublicFilterRegistrationBean<HiddenHttpMethodFilter>testFilterRegistration3(){FilterRegistrationBean<HiddenHttpMethodFilter>registration=newFilterRegistrationBean<HiddenHttpMethodFilter>();registration.setFilter(newHiddenHttpMethodFilter());//添加过滤器registration.addUrlPatterns("/*");//设置过滤路径,/*所有路径registration.setName("HiddenHttpMethodFilter");//设置优先级registration.setOrder(2);//设置优先级returnregistration;}
在页面的form表单中设置method为Post,并添加一个如下的隐藏域:
<inputtype="hidden"name="_method"value="put"/>
查看HiddenHttpMethodFilter源码
StringparamValue=request.getParameter(methodParam);if("POST".equals(request.getMethod())&&StringUtils.hasLength(paramValue)){Stringmethod=paramValue.toUpperCase(Locale.ENGLISH);HttpServletRequestwrapper=newHttpMethodRequestWrapper(request,method);filterChain.doFilter(wrapper,response);}else{filterChain.doFilter(request,response);}}
由源码可以看出,filter只对Post方法进行过滤,且需要添加参数名为_method的隐藏域,也可以设置其他参数名,比如想设置为_method_,可以在HiddenHttpMethodFilter配置类中设置初始化参数:put (methodParam,"_method_")
HttpPutFormContentFilter
由HiddenHttpMethodFilter可知,html中的form的method值只能为post或get,我们可以通过HiddenHttpMethodFilter获取put表单中的参数键值对,而在Spring3中获取put表单的参数键值对还有另一种方法,即使用HttpPutFormContentFilter过滤器。
@BeanpublicFilterRegistrationBean<HttpPutFormContentFilter>testFilterRegistration2(){FilterRegistrationBean<HttpPutFormContentFilter>registration=newFilterRegistrationBean<HttpPutFormContentFilter>();registration.setFilter(newHttpPutFormContentFilter());//添加过滤器registration.addUrlPatterns("/*");//设置过滤路径,/*所有路径registration.setName("HttpPutFormContentFilter");//设置优先级registration.setOrder(2);//设置优先级returnregistration;}
HttpPutFormContentFilter过滤器的作为就是获取put表单的值,并将之传递到Controller中标注了method为RequestMethod.put的方法中。
与HiddenHttpMethodFilter不同,在form中不用添加参数名为_method的隐藏域,且method不必是post,直接写成put,但该过滤器只能接受enctype值为application/x-www-form-urlencoded的表单,也就是说,在使用该过滤器时,form表单的代码必须如下:
<formaction=""method="put"enctype="application/x-www-form-urlencoded">......</form>
另外,经过测试,json数据也是ok的,enctype=”application/json”也是ok的
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
SpringBoot2之PUT请求接收不了参数如何解决的详细内容,希望对您有所帮助,信息来源于网络。