SpringBoot2之PUT請求接收不了參數(shù)的解決方案
SpringBoot2之PUT請求接收不了參數(shù)的解決辦法,這個問題,關(guān)乎兩個Filter過濾器,是spring3和3.5之后提供的,目的就是解決RESTful中PUT請求或者其他請求的問題。
下面請看詳細(xì)內(nèi)容
HiddenHttpMethodFilter

html中form表單只支持GET與POST請求,而DELETE、PUT等method并不支持,spring3添加了一個過濾器,可以將這些請求轉(zhuǎn)換為標(biāo)準(zhǔn)的http方法,使得支持GET、POST、PUT與DELETE請求。
@Bean
public FilterRegistrationBean<HiddenHttpMethodFilter> testFilterRegistration3() {
FilterRegistrationBean<HiddenHttpMethodFilter> registration = new FilterRegistrationBean<HiddenHttpMethodFilter>();
registration.setFilter(new HiddenHttpMethodFilter());//添加過濾器
registration.addUrlPatterns("/*");//設(shè)置過濾路徑,/*所有路徑
registration.setName("HiddenHttpMethodFilter");//設(shè)置優(yōu)先級
registration.setOrder(2);//設(shè)置優(yōu)先級
return registration;
}在頁面的form表單中設(shè)置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方法進(jìn)行過濾,且需要添加參數(shù)名為_method的隱藏域,也可以設(shè)置其他參數(shù)名,比如想設(shè)置為_method_,可以在HiddenHttpMethodFilter配置類中設(shè)置初始化參數(shù):put (methodParam,"_method_")
HttpPutFormContentFilter

由HiddenHttpMethodFilter可知,html中的form的method值只能為post或get,我們可以通過HiddenHttpMethodFilter獲取put表單中的參數(shù)鍵值對,而在Spring3中獲取put表單的參數(shù)鍵值對還有另一種方法,即使用HttpPutFormContentFilter過濾器。
@Bean
public FilterRegistrationBean<HttpPutFormContentFilter> testFilterRegistration2() {
FilterRegistrationBean<HttpPutFormContentFilter> registration = new FilterRegistrationBean<HttpPutFormContentFilter>();
registration.setFilter(new HttpPutFormContentFilter());//添加過濾器
registration.addUrlPatterns("/*");//設(shè)置過濾路徑,/*所有路徑
registration.setName("HttpPutFormContentFilter");//設(shè)置優(yōu)先級
registration.setOrder(2);//設(shè)置優(yōu)先級
return registration;
}HttpPutFormContentFilter過濾器的作為就是獲取put表單的值,并將之傳遞到Controller中標(biāo)注了method為RequestMethod.put的方法中。
與HiddenHttpMethodFilter不同,在form中不用添加參數(shù)名為_method的隱藏域,且method不必是post,直接寫成put,但該過濾器只能接受enctype值為application/x-www-form-urlencoded的表單,也就是說,在使用該過濾器時,form表單的代碼必須如下:
<form action="" method="put" enctype="application/x-www-form-urlencoded">
......
</form> 另外,經(jīng)過測試,json數(shù)據(jù)也是ok的,enctype=”application/json”也是ok的
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- SpringBoot如何接收Post請求Body里面的參數(shù)
- springboot接收http請求,解決參數(shù)中+號變成空格的問題
- SpringBoot用實體接收Get請求傳遞過來的多個參數(shù)的兩種方式
- 解讀SpringBoot接收List<Bean>參數(shù)問題(POST請求方式)
- SpringBoot請求參數(shù)接收方式
- springboot如何接收get和post請求參數(shù)
- SpringBoot請求參數(shù)傳遞與接收說明小結(jié)
- SpringBoot優(yōu)雅接收前端請求參數(shù)的詳細(xì)過程
- SpringBoot接收請求參數(shù)的四種方式總結(jié)
相關(guān)文章
Spring Boot利用Docker快速部署項目的完整步驟
這篇文章主要給大家介紹了關(guān)于Spring Boot利用Docker快速部署項目的完整步驟,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
Spring?代理?Bean?獲取不到原始?Bean?對象注解解決方法
這篇文章主要介紹了Spring?代理?Bean?獲取不到原始?Bean?對象注解解決方法,文章圍繞主題相關(guān)資料展開詳細(xì)介紹,需要的小伙伴可以參考一下2022-04-04
Mybatis中resultMap的Colum和property屬性詳解
這篇文章主要介紹了Mybatis中resultMap的Colum和property屬性,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教。2022-01-01
聊一聊jdk1.8中的ArrayList 底層數(shù)組是如何擴(kuò)容的
這篇文章主要介紹了聊一聊jdk1.8中的ArrayList 底層數(shù)組是如何擴(kuò)容的,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08

