SpringBoot2之PUT请求接收不了参数如何解决(put,springboot,开发技术)

时间:2024-05-04 07:54:03 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

HiddenHttpMethodFilter

SpringBoot2之PUT请求接收不了参数如何解决

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

SpringBoot2之PUT请求接收不了参数如何解决

由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请求接收不了参数如何解决的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Java File分隔符和Path分隔符如何使用下一篇:

130 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18