SpringBoot2之PUT請(qǐng)求接收不了參數(shù)的解決方案
SpringBoot2之PUT請(qǐng)求接收不了參數(shù)的解決辦法,這個(gè)問(wèn)題,關(guān)乎兩個(gè)Filter過(guò)濾器,是spring3和3.5之后提供的,目的就是解決RESTful中PUT請(qǐng)求或者其他請(qǐng)求的問(wèn)題。
下面請(qǐng)看詳細(xì)內(nèi)容
HiddenHttpMethodFilter
html中form表單只支持GET與POST請(qǐng)求,而DELETE、PUT等method并不支持,spring3添加了一個(gè)過(guò)濾器,可以將這些請(qǐng)求轉(zhuǎn)換為標(biāo)準(zhǔn)的http方法,使得支持GET、POST、PUT與DELETE請(qǐng)求。
@Bean public FilterRegistrationBean<HiddenHttpMethodFilter> testFilterRegistration3() { FilterRegistrationBean<HiddenHttpMethodFilter> registration = new FilterRegistrationBean<HiddenHttpMethodFilter>(); registration.setFilter(new HiddenHttpMethodFilter());//添加過(guò)濾器 registration.addUrlPatterns("/*");//設(shè)置過(guò)濾路徑,/*所有路徑 registration.setName("HiddenHttpMethodFilter");//設(shè)置優(yōu)先級(jí) registration.setOrder(2);//設(shè)置優(yōu)先級(jí) return registration; }
在頁(yè)面的form表單中設(shè)置method為Post,并添加一個(gè)如下的隱藏域:
<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只對(duì)Post方法進(jìn)行過(guò)濾,且需要添加參數(shù)名為_(kāi)method的隱藏域,也可以設(shè)置其他參數(shù)名,比如想設(shè)置為_(kāi)method_,可以在HiddenHttpMethodFilter配置類中設(shè)置初始化參數(shù):put (methodParam,"_method_")
HttpPutFormContentFilter
由HiddenHttpMethodFilter可知,html中的form的method值只能為post或get,我們可以通過(guò)HiddenHttpMethodFilter獲取put表單中的參數(shù)鍵值對(duì),而在Spring3中獲取put表單的參數(shù)鍵值對(duì)還有另一種方法,即使用HttpPutFormContentFilter過(guò)濾器。
@Bean public FilterRegistrationBean<HttpPutFormContentFilter> testFilterRegistration2() { FilterRegistrationBean<HttpPutFormContentFilter> registration = new FilterRegistrationBean<HttpPutFormContentFilter>(); registration.setFilter(new HttpPutFormContentFilter());//添加過(guò)濾器 registration.addUrlPatterns("/*");//設(shè)置過(guò)濾路徑,/*所有路徑 registration.setName("HttpPutFormContentFilter");//設(shè)置優(yōu)先級(jí) registration.setOrder(2);//設(shè)置優(yōu)先級(jí) return registration; }
HttpPutFormContentFilter過(guò)濾器的作為就是獲取put表單的值,并將之傳遞到Controller中標(biāo)注了method為RequestMethod.put的方法中。
與HiddenHttpMethodFilter不同,在form中不用添加參數(shù)名為_(kāi)method的隱藏域,且method不必是post,直接寫(xiě)成put,但該過(guò)濾器只能接受enctype值為application/x-www-form-urlencoded的表單,也就是說(shuō),在使用該過(guò)濾器時(shí),form表單的代碼必須如下:
<form action="" method="put" enctype="application/x-www-form-urlencoded"> ...... </form>
另外,經(jīng)過(guò)測(cè)試,json數(shù)據(jù)也是ok的,enctype=”application/json”也是ok的
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- SpringBoot如何接收Post請(qǐng)求Body里面的參數(shù)
- springboot接收http請(qǐng)求,解決參數(shù)中+號(hào)變成空格的問(wèn)題
- SpringBoot用實(shí)體接收Get請(qǐng)求傳遞過(guò)來(lái)的多個(gè)參數(shù)的兩種方式
- 解讀SpringBoot接收List<Bean>參數(shù)問(wèn)題(POST請(qǐng)求方式)
- SpringBoot請(qǐng)求參數(shù)接收方式
- springboot如何接收get和post請(qǐng)求參數(shù)
- SpringBoot請(qǐng)求參數(shù)傳遞與接收說(shuō)明小結(jié)
- SpringBoot優(yōu)雅接收前端請(qǐng)求參數(shù)的詳細(xì)過(guò)程
- SpringBoot接收請(qǐng)求參數(shù)的四種方式總結(jié)
相關(guān)文章
List轉(zhuǎn)變?yōu)槎禾?hào)分隔的String(Java7和Java8分別實(shí)現(xiàn))
這篇文章主要介紹了Java7和Java8分別實(shí)現(xiàn)List轉(zhuǎn)變?yōu)槎禾?hào)分隔的String,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06解決springcloud 配置gateway 出現(xiàn)錯(cuò)誤的問(wèn)題
今天給大家分享springcloud 配置gateway 出現(xiàn)錯(cuò)誤的問(wèn)題,其實(shí)解決方法很簡(jiǎn)單,只需要降低springcloud版本,改成Hoxton.SR5就好了,再次改成Hoxton.SR12,也不報(bào)錯(cuò)了,下面給大家展示下,感興趣的朋友一起看看吧2021-11-11詳解Java?redis中緩存穿透?緩存擊穿?雪崩三種現(xiàn)象以及解決方法
緩存穿透是指緩存和數(shù)據(jù)庫(kù)中都沒(méi)有的數(shù)據(jù),而用戶不斷發(fā)起請(qǐng)求,如發(fā)起為id為“-1”的數(shù)據(jù)或id為特別大不存在的數(shù)據(jù)。這時(shí)的用戶很可能是攻擊者,攻擊會(huì)導(dǎo)致數(shù)據(jù)庫(kù)壓力過(guò)大2022-01-01Elasticsearch查詢之Match Query示例詳解
這篇文章主要為大家介紹了Elasticsearch查詢之Match查詢示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04話說(shuō)Spring Security權(quán)限管理(源碼詳解)
本篇文章主要介紹了話說(shuō)Spring Security權(quán)限管理(源碼詳解) ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02SpringBoot+React實(shí)現(xiàn)計(jì)算個(gè)人所得稅
本文將以個(gè)人所得稅的計(jì)算為例,使用React+SpringBoot+GcExcel來(lái)實(shí)現(xiàn)這一功能,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解下2023-09-09java通過(guò)cglib動(dòng)態(tài)生成實(shí)體bean的操作
這篇文章主要介紹了java通過(guò)cglib動(dòng)態(tài)生成實(shí)體bean的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02Java實(shí)現(xiàn)斗地主最簡(jiǎn)代碼實(shí)例
在本篇文章里小編給各位分享的是關(guān)于Java實(shí)現(xiàn)斗地主最簡(jiǎn)代碼實(shí)例,有興趣的朋友們可以參考下。2020-05-05