springmvc中@requestbody註解接收前端引數使用content-type型別
最近程式碼遇見了一個springmvc中的小問題,算是很基礎的東西,同事問我後我有有些迷惑上網找了一些資料後弄清楚了。特此記錄一下
首先是後臺程式碼使用springmvc註解@requestbody,前端採用了easyui結合angulajs,老大把前端程式碼封裝了很多東西,其實我們都是表面做工,就只是停留在使用層面上,包括後端框架的環境配置上,之前也是自己搭專案適合拷貝了一個base框架,時間長了對配置裡面的具體內容都不是太瞭解了。
言歸正傳問題是這樣的:
1.前端做儲存操作的時候提交了很多引數過來,老大封裝的同時把前端程式碼提交的時候content-type改成了application/json,後臺也配置了一個針對spring4的son型別的httpmessageConverter,某次提交的時候加了@requestbody註解的時候引數獲取不上並且報引數400,400這個狀態碼我們很瞭解,是因為引數型別不對,後來才發現是因為同事後臺引數定義的實體bean比傳過來的引數少定義了一個引數導致報了400,這是第一個地方。
2.平時我在寫後臺程式碼給前端app做介面的時候,其實並沒有太在意,有些我都是直接沒有用@requestbody這個註解,直接在入參的地方寫了引數bean,也是可以直接解析到的。
答案:經過一番百度,發現了原因。springmvc這個地方針對前端提交引數的時候,有幾種content-type的型別,這個地方請參考這篇文章 :http://blog.csdn.net/blueheart20/article/details/45174399
關鍵得是@requestBody註解常用來處理content-type不是預設的application/x-www-form-urlcoded編碼的內容,比如說:application/json或者是application/xml等。一般情況下來說常用其來處理application/json型別。
附:form預設的提交方式content-type是x-www-form-urlencoded,會將傳遞的引數轉換成key-value方式。
附帶著說一下使用postman方式設定content-type為application/json方式測試後臺介面
這個地方需要把要傳送的引數寫成json物件的格式貼上在raw下面,上面的路徑上就不用寫引數了。
更多的postman設定content-type參考:http://blog.csdn.net/qq_25730711/article/details/54707603。