SpringMVC中出現" 400 Bad Request "錯誤(用@ResponseBody處理ajax傳過來的json數據轉成bean)的解決方法

      今天開發過程中,在SpringMVC中的Action中處理前臺ajax請求傳過來的json數據直接轉成對應的實體類時出錯:400 Bad Request,後臺也不報錯,400指的的是請求無效(請求有語法問題或者不能滿足請求),調試了好長時間才解決了,特意記錄下來,並和大家一同分享一下。

        出現這個錯誤的原因一般最常見的就是後臺的實體類bean與前臺穿過的類型不匹配,我的就是,因爲的javabean中有定義了Date類型和int類型的成員變量,導致轉化器在把json數據轉化成bean時不能轉化,其實如果用JSONObject.toBean方法轉化時,這種情況也會報錯的。

       1、我的解決辦法就是把實體類的javabean裏邊的類型都改成string類型了,在配置SQL語句時用數據庫函數to_date或者to_number轉化的,如果再java中用到這個字符串類型的日期的話,有必要的話,就用For format=new SimpleDateFormat("yyyy-MM-dd"),format.parse()來轉換。

       2、其實還可以在實體類中定義Date和int類型對應的字符串類型成員變量,這樣前臺的表單中field或者name與之對應上即可,這樣也成功轉成實體類了,不過轉成之後,得在java中把它字符串類型的轉成對應的Date或者int類型賦給相應的成員變量即可。

       3、在就是還有一種方法就是在對應的實體類的對應的非字符串類型的變量的setter方法中傳入string類型的,然後在裏邊用SimpleDateFormat或者Integer進行轉化。

       4、最後還有一種方法,就是實體類的日期屬性上加@DateTimeFormat(pattern="yyyy-MM-dd")註解,大部分是可以成功使用的。如果這種方法不可用的話,你看繼續嘗試如下方法:不過這個前提是前臺穿過的日期爲json形式而非字符串形式,如前臺類似$("#id").val()來獲取日期直接傳給後臺的話是不行的,你需要在前臺引入JSON官網的json.js庫或者引入jQuery的jquery.json-2.4.js庫,然後如果是前者的話就new Date(stringDate).parseJSON()來轉化再傳給後臺,如果是後者的話,$.toJSON(new Date(stringdate))來傳給後臺,這種方式比較麻煩,有網友留言特意討論了一下這個問題,所以建議採用第一種方式。

       如果你有更好的更優秀的方式解決這種問題,還請您手下留情,留下您的寶貴意見,以使大家共同的學習和成長。

       網上我看了一些有關問題,看網友們還有一些其他原因導致這個錯誤的,特總結歸納了一下方便網友們參考:

(1)log4j的配置文件裏錯誤將部分log打爲Info級別所致
(2)傳參數的時候,參數名使用了關鍵字“name”(我試了試,我的沒報錯正常)
(3)本來要返回json的卻忘了加@RequestBody
(4)ajax請求的連接後邊忘了加參數

(5)前臺傳參時參數的順序與後臺實體類的各個屬性的順序不一致(我試了試,我的順序改變無影響)

(6)如果是傳了非實體bean屬性的參數過來也會發生這種情況

轉載請註明—作者:Java我人生(陳磊興)   原文出處:http://blog.csdn.net/chenleixing/article/details/43740759

發佈了27 篇原創文章 · 獲贊 59 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章