SpringBoot2之PUT请求接收不了参数的解决方案

 更新时间:2022年07月01日 10:10:50   作者:Moshow郑锴  
这篇文章主要介绍了SpringBoot2之PUT请求接收不了参数的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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的

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • List转变为逗号分隔的String(Java7和Java8分别实现)

    List转变为逗号分隔的String(Java7和Java8分别实现)

    这篇文章主要介绍了Java7和Java8分别实现List转变为逗号分隔的String,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 解决springcloud 配置gateway 出现错误的问题

    解决springcloud 配置gateway 出现错误的问题

    今天给大家分享springcloud 配置gateway 出现错误的问题,其实解决方法很简单,只需要降低springcloud版本,改成Hoxton.SR5就好了,再次改成Hoxton.SR12,也不报错了,下面给大家展示下,感兴趣的朋友一起看看吧
    2021-11-11
  • Java 8 新特性终极版指南详解

    Java 8 新特性终极版指南详解

    Java 8已经公布有一段时间了,种种迹象表明Java 8是一个有重大改变的发行版。本文给大家介绍Java 8 新特性终极版指南详解,需要的朋友参考下
    2016-03-03
  • 详解Java redis中缓存穿透 缓存击穿 雪崩三种现象以及解决方法

    详解Java redis中缓存穿透 缓存击穿 雪崩三种现象以及解决方法

    缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大
    2022-01-01
  • Elasticsearch查询之Match Query示例详解

    Elasticsearch查询之Match Query示例详解

    这篇文章主要为大家介绍了Elasticsearch查询之Match查询示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • 话说Spring Security权限管理(源码详解)

    话说Spring Security权限管理(源码详解)

    本篇文章主要介绍了话说Spring Security权限管理(源码详解) ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • SpringBoot+React实现计算个人所得税

    SpringBoot+React实现计算个人所得税

    本文将以个人所得税的计算为例,使用React+SpringBoot+GcExcel来实现这一功能,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解下
    2023-09-09
  • java通过cglib动态生成实体bean的操作

    java通过cglib动态生成实体bean的操作

    这篇文章主要介绍了java通过cglib动态生成实体bean的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Java实现斗地主最简代码实例

    Java实现斗地主最简代码实例

    在本篇文章里小编给各位分享的是关于Java实现斗地主最简代码实例,有兴趣的朋友们可以参考下。
    2020-05-05
  • Java log4j详细教程

    Java log4j详细教程

    日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录。在apache网站:jakarta.apache.org/log4j 可以免费下载到Log4j最新版本的软件包
    2015-11-11

最新评论