使用Spring MVC 的 @RequestBody 對映json請求引數時報異常問題
最近工作中開發RESTful介面需要處理客戶端上傳的json,圖方便想起Spring的Controller中有@RequestBody可以優雅地完成json報文與Java類的對映,但是使用時碰到了 “The request sent by the client was syntactically incorrect.” 異常,記得以前也有碰到過,但是沒有把原因記錄下來,這次又掉坑裡了。又baidugoogle了一會才解決,好記性不如爛筆頭,這次還是好好反省下。
最近工作中開發RESTful介面需要處理客戶端上傳的json,圖方便想起Spring的Controller中有@RequestBody可以優雅地完成json報文與Java類的對映,但是使用時碰到了 “The request sent by the client was syntactically incorrect.” 異常,記得以前也有碰到過,但是沒有把原因記錄下來,這次又掉坑裡了。又baidugoogle了一會才解決,好記性不如爛筆頭,這次還是好好反省下。
異常原因
字面上理解就是“客戶端傳送的請求語法不正確”這種意義不明的異常資訊。語法不正確說的是什麼語法?其實這裡指的是上傳的json報文不符合跟對應Java類的對映關係。舉個栗子:
比如頁面上Ajax請求的json報文如下:
Java工程中對應的類定義:
用上述程式碼對映客戶端上傳的json報文就會報“The request sent by the client was syntactically incorrect.”異常。原因很簡單,因為上傳的json報文中有id,name,gender三個欄位,而用來對映的java類中只有id欄位,匹配不了,這就是所謂的“語法不正確”。如果將上述
Person 類的定義改成:
程式再跑起來沒問題了。而且,這裡的Person還可以多定義幾個欄位,即:只要客戶度上傳的json報文欄位都有定義,且型別定義正確,使用@RequestBody對映時就不會報“The request sent by the client was syntactically incorrect.”異常。
總結
在Spring的Controller中使用@RequestBody對映客戶端請求的json報文時,需要注意幾點:
- json報文中有的欄位,Java類中也要做定義,且型別必須相同。
- Java類中定義的欄位,json報文中可以不出現,到時候對映出來的就是null或者預設值。
相關文章
- SpringMVC學習(三)對映請求引數&請求引數SpringMVC
- Spring MVC的Post請求引數中文亂碼的原因&處理SpringMVC
- Spring對JSON請求加解密SpringJSON解密
- 關於在request請求時,處理請求引數的問題
- 【踩坑】spring mvc在接收請求引數時由於大小寫問題導致的接收失敗SpringMVC
- Spring MVC 接收POST表單請求,獲取引數總結SpringMVC
- 有趣的請求引數/請求頭
- spring cloud gateway 原始碼解析(3)記錄請求引數及返回的jsonSpringCloudGateway原始碼JSON
- 解決ajax請求引數過多導致引數被截斷的問題
- axios請求JSON問題詳解iOSJSON
- postman 請求引數和 Spring Boot Controller 接受引數PostmanSpring BootController
- Spring MVC的請求處理邏輯SpringMVC
- Spring框架下的 “介面呼叫、MVC請求” 呼叫引數、返回值、耗時資訊輸出Spring框架MVC
- 請教大家spring mvc的action轉發問題SpringMVC
- 請求引數的傳遞
- spring mvc中獲取請求URLSpringMVC
- MVC使用異常過濾器處理異常MVC過濾器
- Vue 使用 Axios 傳送請求的請求體問題VueiOS
- SpringMVC--請求資料對映SpringMVC
- Spring系列(七) Spring MVC 異常處理SpringMVC
- Spring MVC統一異常處理SpringMVC
- Spring MVC能響應HTTP請求的原因?SpringMVCHTTP
- 解決.NET Core Ajax請求後臺傳送引數過大請求失敗問題
- beego rest ful 請求引數為JSON怎麼獲取GoRESTJSON
- (七)Spring Boot Controller的請求引數獲取Spring BootController
- Postman傳送請求引數是Map格式的請求Postman
- GET請求的引數丟失
- Spring MVC 3 Action 支援的引數SpringMVC
- struts json型別返回結果異常問題JSON型別
- Spring Cloud Gateway 動態修改請求引數解決 # URL 編碼錯誤傳參問題SpringCloudGateway
- Spring MVC原始碼(二) ----- DispatcherServlet 請求處理流程 面試必問SpringMVC原始碼Servlet面試
- Spring MVC 處理一個請求的流程分析SpringMVC
- Spring MVC框架處理Web請求的基本流程SpringMVC框架Web
- 用 Httprunner3 做介面測試遇到了問題,.with_json 的引數是列表時報錯HTTPJSON
- 【web】Spring RestTemplate提交時設定POST請求引數WebSpringREST
- Spring Boot中的 6 種API請求引數讀取方式Spring BootAPI
- 大請求、請求超時問題
- Loadrunner+引數化檔案編碼格式+獲取請求報文發生異常