SpringBoot2之PUT请求接收不了参数的解决方案
作者:Moshow郑锴 发布时间:2023-08-23 01:32:07
SpringBoot2之PUT请求接收不了参数的解决办法,这个问题,关乎两个Filter过滤器,是spring3和3.5之后提供的,目的就是解决RESTful中PUT请求或者其他请求的问题。
下面请看详细内容
HiddenHttpMethodFilter
html中form表单只支持GET与POST请求,而DELETE、PUT等method并不支持,spring3添加了一个过滤器,可以将这些请求转换为标准的http方法,使得支持GET、POST、PUT与DELETE请求。
@Bean
public FilterRegistrationBean<HiddenHttpMethodFilter> testFilterRegistration3() {
FilterRegistrationBean<HiddenHttpMethodFilter> registration = new FilterRegistrationBean<HiddenHttpMethodFilter>();
registration.setFilter(new HiddenHttpMethodFilter());//添加过滤器
registration.addUrlPatterns("/*");//设置过滤路径,/*所有路径
registration.setName("HiddenHttpMethodFilter");//设置优先级
registration.setOrder(2);//设置优先级
return registration;
}
在页面的form表单中设置method为Post,并添加一个如下的隐藏域:
<input type="hidden" name="_method" value="put" />
查看HiddenHttpMethodFilter源码
String paramValue = request.getParameter(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);
}
}
由源码可以看出,filter只对Post方法进行过滤,且需要添加参数名为_method的隐藏域,也可以设置其他参数名,比如想设置为_method_,可以在HiddenHttpMethodFilter配置类中设置初始化参数:put (methodParam,"_method_")
HttpPutFormContentFilter
由HiddenHttpMethodFilter可知,html中的form的method值只能为post或get,我们可以通过HiddenHttpMethodFilter获取put表单中的参数键值对,而在Spring3中获取put表单的参数键值对还有另一种方法,即使用HttpPutFormContentFilter过滤器。
@Bean
public FilterRegistrationBean<HttpPutFormContentFilter> testFilterRegistration2() {
FilterRegistrationBean<HttpPutFormContentFilter> registration = new FilterRegistrationBean<HttpPutFormContentFilter>();
registration.setFilter(new HttpPutFormContentFilter());//添加过滤器
registration.addUrlPatterns("/*");//设置过滤路径,/*所有路径
registration.setName("HttpPutFormContentFilter");//设置优先级
registration.setOrder(2);//设置优先级
return registration;
}
HttpPutFormContentFilter过滤器的作为就是获取put表单的值,并将之传递到Controller中标注了method为RequestMethod.put的方法中。
与HiddenHttpMethodFilter不同,在form中不用添加参数名为_method的隐藏域,且method不必是post,直接写成put,但该过滤器只能接受enctype值为application/x-www-form-urlencoded的表单,也就是说,在使用该过滤器时,form表单的代码必须如下:
<form action="" method="put" enctype="application/x-www-form-urlencoded">
......
</form>
另外,经过测试,json数据也是ok的,enctype=”application/json”也是ok的
来源:https://zhengkai.blog.csdn.net/article/details/80173817
猜你喜欢
- 一、下载Unity首先去官网下载对应版本的 UnityHubUnity官网地址: https://unity.cn/releases&nbs
- 本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下:我们需要获取Android手机或Pad的屏幕的
- Android 中Manifest.xml文件详解每一个Android项目都包含一个清单(Manifest)文件--AndroidManif
- 已经自学OpencvSharp一段时间了(目前工作用的是C#,就学了Opencvsharp了,vs2015,opencvsharp3),收获
- OpenCV概述OpenCV做为功能强大的计算机视觉开源框架,包含了500多个算法实现,而且还在不断增加,其最新版本已经更新到3.2。其SD
- 前言:对于一个程序员来说,尤其是在java web端开发的程序员,三大框架:Struts+Hibernate+Spring是必须要掌握熟透的
- 使用 DateFormat 格式化日期、时间DateFormat 也是一个抽象类,它也提供了如下几个类方法用于获取 DateFormat 对
- java.lang.StackOverflowError出现的原因严重: Exception initializing page conte
- 将C语言封装成函数dll供C#端调用,需要传递的byte数组作为函数参数来传递。1、打开Visual Studio2017创建一个C的dll
- 前言Activity可以获取运行中的应用信息,可以获取到servcie,process,app,memory,Task信息等。获取信息Act
- Servlet:在Servlet中拼接html内容JSP:在html中拼接javaJSP+JavaBean:利用javaBean将大量的代码
- 本文实例讲述了Java实现的最大匹配分词算法。分享给大家供大家参考,具体如下:全文检索有两个重要的过程:1分词2倒排索引我们先看分词算法目前
- 前言在学习android中图形图像处理技术这部分内容时,对绘制圆弧函数canvas.drawArc()的用法、参数含义及画图原理很是不理解,
- 一、java内存区域Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和
- SpringEL表达式取值一般是${var}方式取值, 见于application.properties和@Value("${va
- 前言我们可能听过C语言中的传值和传指针,在其他语言中,也有传引用一说,那么他们到底有什么区别呢?如果你还不能准确地分辨,就该好好了解一下了。
- 本文实例为大家分享了C#实现飞行棋的具体代码,供大家参考,具体内容如下游戏规则如果玩家A踩到了玩家B,玩家B退6格踩到了1幸运轮盘,a交换位
- Word中设置水印时,可加载图片设置为水印效果,但通常添加水印效果时,会对所有页面都设置成统一效果,如果需要对每一页或者某个页面设置不同的水
- 今天一直在绞尽脑汁的寻找解决两个字符之间的内容如何输出的问题,刚开始就使用了万能的正则表达式;但是不知哪里的原因自己的数据一直出不来,觉得应
- 前言前一阵项目中的上传图片改为上传到阿里上,记录一下实现的过程,方便以后查看。参考资料:官方文档配置Android studio添加依赖de