轉自:https://blog.csdn.net/lw1242189467/article/details/80048407
今天我遇上一個讓我很痛心的錯誤400。對程序員來說,這可能是一個最簡單的錯誤碼。因為這個相應並沒有進攔截器,更沒有進到Controller層。可我在解決這個問題時,質詢了很多朋友不解,百度各種方案無效。苦苦耗費我大半天時間。
首先,遇到400問題,最大幾率是出現了數據類型不一致的問題,簡單來說是Controller層不用正確讀取你發送請求附帶的參數。該例是我前端傳送JSON格式,使用postmen接收。
一.發現400錯誤的,第一步確認postmen中發送的數據類型是json。比如Headers中Content-Type類型是application/json;或是前端代碼Ajax中添加:contentType: 'application/json;charset=UTF-8'(如圖);
二.第一步確認postmen中發送的數據格式是否正確。postmen中經常有人有漏寫一對“{}“或是缺少逗號,引號,冒號的小問,好在postmen會自動報錯提示; 而在前端中你必須重新包裝傳入參數為JSON型。使用JSON.stringify(params)將params參數重新包裝;
三.正常解決以上兩個問題,多數人錯誤也該解決了。如果還沒有,我們就要在Controller接收處查找問題。
順帶一說:前端用json傳入,后端如果用對象接收,及時傳入變量名與該對象的屬性名對應上,也不會自動封裝進去,當然也不會直接報錯。如果想json型自動轉換成對象,需要在對象前面添加@RequestBody注解。它會將JSON進行轉換成為你指定的對象。
但是我個人更喜歡用JSONObeject或Strng去接受,在用手動將它轉化為我需要的對象,因為我傳入的對象可能是嵌套好的,其中有一個對象,還有其他對象的List。在頭部自動轉化就會出現一些問題。
言歸正傳,第三個可能出現400的問題就在這。使用RequestBody轉化成String時,意外報錯,類型不匹配。這一點也是我萬萬沒想到的。因為之前一個項目基本都是用String在接收前端的JSONO對象。這次卻卡在400處。解決的方案很簡單,使用JSONObject原原本本的接收JSON對象!直接使用!可正常情況String接收也是可以的,這點讓我很費解,花了不少時間也沒能找到原因。可能是注解的配置問題,又或者是因為使用SSM和springBoot框架的差異。