昨天晚上做項目遇到了一個奇怪的問題,我用ajax提交一個form表單,后台Java方法用的是一個實體接,但是他根本不進方法體中,直接給我一個400的錯誤,一開始我以為是我路徑的問題(尷尬),結果直接訪問那個請求的@requestMapping發現沒有問題,竟然進入了我的方法體中,這就可以說明兩個問題了,第一個問題就是:跟我的請求地址沒有關系,第二個問題就是肯定跟我的請求所帶的參數有關系,上網查了一下資料,因為我的一次增加字段比較多,就用的是$("#fromId").serialize()的方法序列化參數,發現這種方法將所有的東西都變成了字符串,網上都說我的問題是因為傳到后端的參數類型不符合,然后我就試了一下,只帶一個字符型的參數直接請求地址,他竟然還不行,給我報錯說不能夠將null(就是我帶的參數的那個字段)保存進入數據庫,這下我不淡定了,我明明就將該字段當作參數帶着了,又是一會的糾結,突然發現,我用的字段是大寫的,而實體中的是小寫,我就試了一下,他大爺的,過了,然后我就瘋狂的該我的大小寫,五十多個字段,手都快廢了我,改好了懷着期待的心情點擊保存,發現還是過不去,我想罵人了,想起來還有可能就是參數類型不符合,然后我就講實體中的所有的date類型,int類型,bigdecimal類型的set方法的參數全部改成String,然后在方法體中給轉換過來賦值,進過一番搜素,確定無誤之后,再次點擊保存,還是過不去,差點砸電腦了,一個保存用了我一個晚上,靜下心我又將所有的參數給打印出來,用了最笨的方法,一個一個的試,看看到底是那些過不去,有事一番苦戰,終於找到了讓我奔潰的原因,在我剛才改變字段大小寫的時候,因為字段太多,把某一個字段弄重復了。。。。。最后終於給搞好了。
雖然花費了我一個晚上的時間就搞了這么一個破東西,還是一個最簡單的保存功能,但是我也學到了一點東西:
1、雖然程序員免不了經常用粘貼復制,但是一定要細心了,特別是在重復的粘貼復制時。
2、越是簡單的東西用着就越要小心,不然他崩潰都不跟你說什么原因,直接給你一個400讓你慢慢排查問題去。
3、form表單提交用實體接收時,需要將input或者select中的name屬性的字符和實體中的字符完全保持一直包括大小寫,不是和數據庫中的字段保持一致。
4、form的序列化提交表單帶過去的參數全都被序列化成了字符串類型,后端的字段類型如果是int、date等類型的需要手動將set方法給轉換一下,轉換方法上面一大堆中有。