springMVC中前台ajax傳json數據后台controller接受對象為null


在jquery的ajax中,如果沒加contentType:"application/json",那么data就應該對應的是json對象,反之,如果加了contentType:"application/json",那么ajax發送的就必須是字符串。

下面便是兩種犯錯的例子:

1>前台ajax多加了contentType:"application/json",data卻錯傳成json對象:


后台處理:(employee該pojo對象里有username和password等String字段)


結果都為null


將contentType去掉后,


后台成功反射出對象:




2>ajax中沒加contentType:"application/json",data卻直接使用了json字符串(和上面的一個道理)


后台情況:




3>第三點是真的有點惡心的一點,找了好久才找到。。

那就是  有些  關鍵的屬性在Mvc層中反射失敗,會導致其他所有屬性都為null




比如上面的joindate對應的pojo是Date,本來input框里的值是 Thu Dec 30 00:00:00 CST 1999 ,傳到后台用Date接收,但是顯然格式不對,於是Date合成出了錯,然后坑爹的就來了,因為這個特殊的屬性反射失敗,Mvc層就將請求打回去然后導致瀏覽器報錯400 bad request ,從而導致其他所有屬性都為null。最后把joindate屬性注釋掉,后台什么屬性的值都收到了。。



補充:我們都知道,不管前台發送的是json字符串還是對象,服務器本質上收到的都是字符流,那么為什么ajax又可以直接傳對象呢?因為不加contentType:"application/json"的時候,發送類型變為默認的application/x-www-form-urlencoded,而這種方式會以鍵值對的形式將對象序列化,所以傳進去的對象實際上還是變成了字符流



 

原文連接:https://blog.csdn.net/qq_37960007/article/details/79542727


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM