其實說上來也不是SpringMVC的坑。linux
相同的一份代碼,我在windows上用mvn打成jar放到linux上執行,POST請求能夠接收到參數;git
可是我直接在linux上從git拉取分支,並在linux上打包部署這個POST請求就是接受到不到參數,真的是一毛同樣的代碼打成的包,開始我解決的思路在如下幾個地方:spring
mave在linux下打包和windows下打包有差別?找了好久發現沒有這個問題。windows
spring mvc的源碼也翻了一下,發現問題是在Request的body中有byte數組,字符串的參數以字節的形式放在其中,可是ParameterMap中就是一個參數都沒有,而windows下打包運行Parameter中就有參數,雖然發現了這個異樣,可是沒能定位問題,覺得是tomcat有問題。數組
spring boot的tomcat接受參數有問題,在windows下和linux下不同?網上查了一下內置的tomcat彷佛沒什麼bug。tomcat
真的是要抓狂了,搞了好幾天都沒有解決這個問題,害的我寫的一鍵部署的bash腳本都無法用了,每次都是在windows上打包,而後用ftp發到linux上部署,太痛苦了。bash
。mvc
。測試
。orm
。
。
。
。
。
最後準備放棄的放棄的時候,忽然隨便點點目錄,在某個犄角旮旯還有一個文件夾,裏面有4個Filter(接手別人的項目),我真是日了狗了,立馬把這4個Filter刪掉,而後從新在linux下打包部署,測試一下果真收到了參數(POST,form)。
令我疑惑的是爲啥一樣是一份代碼,windows上能夠接受到參數,而linux接受不到參數?我沒有深究,已經受傷了。。。
另外,要吐槽一下這個代碼,雖然被我傷了n多的AOP和Filter,沒想到仍是有一個遺留的Filter。就我我的而言,業務能夠複雜,可是項目結構不要負載,不要弄各類AOP和Filter,除非不得已。除了問題真的能夠搞死人。不要隨便秀操做,謝謝。
P. S.
HttpServletRequest中的流只能讀一次,再讀的話就會報錯,好像之後特殊的處理能夠讀兩次