跟着視頻學習時候,用到了serialize()方法封裝一組form中的數據,然後使用PUT方式提交,但是卻無法獲取到其中的信息,而且信息臺還報錯說SQL語句錯誤,如圖
如圖,用PUT提交數據後,在Controller.java中寫了一個輸出語句,結果發現獲取到的數據居然都是null!
然而,我之前用POST的方式都沒問題,能夠很好的獲取封裝好的數據然後提取出來。
我根據信息臺去看,說SQL語句報錯,然而SQL語句是mybatis-generator自動生成的,肯定是每錯的。而真正的問題,就出在PUT提交方式上
簡單來說就是:Tomcat本身的設置,令Tomcat無法封裝PUT方式提交的數據,只能封裝POST提交的數據,這樣一來,自然無法讀取數據
解決方法:在web.xml中添加如下過濾器
<filter>
<filter-name>HttpPutFormContentFilter</filter-name>
<filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HttpPutFormContentFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
原理:我們需要能支持直接發送PUT請求,還要封裝請求體中的數據,配置如上的xml。將請求體中的數據封裝成一個map,request被重新包裝,request.getParameter()會被重新封裝,就會從自己封裝的map中取數據
解決後如圖