標籤:資料互動 \n 請求 public api upload 分享 屬性 $.ajax
Ajax json互動和SpringMVC中@RequestBody
標籤:
背景
自己提供出去得介面中參數設定為@RequestBody VipPromotionLog vipPromotionLog為一個對象。但是前端人員得處理方式代碼如下
var data = { "userId" : 20142100122, "userOperationStep" : 2, "appPlatform": "android", "app" : 0, "videoId":123123 }; $.ajax({ url : ‘http://localhost:81/online-2c/api/vippromotion‘, type : ‘POST‘, dateType : ‘json‘, data:data, success : function(msg){ console.log(msg); } })
問題出現
上述情況出現一錯誤
圖一
排查
查看這從請求得類型二
圖二
content-Type為application/x-www-form-urlencoded
而且傳輸過去的類型是一個對象,那麼我們設定的@RequestBody需要的是什麼,難道不是一個對象。這裡我個人的理解為@RequestBody需要傳輸過去的是一個字串並且和其注釋的對象的屬性一一對應。
解決辦法一
有兩種辦法解決 第一不改變後台代碼的情況下解決辦法如下代碼
var data = { "userId" : 20142100122, "userOperationStep" : 2, "appPlatform": "android", "app" : 0, "videoId":123123 }; $.ajax({ url : ‘http://localhost:81/online-2c/api/vippromotion‘, type : ‘POST‘, dateType : ‘json‘, contentType : ‘application/json‘, data:JSON.stringify(data), success : function(msg){ console.log(msg); } })
application/json 傳輸過去的資料為json對象的字串,data為一個對象,用JSON.stringify轉換成對象字串,其實上面代碼和下面的是一樣的
var data = ‘{\n‘ + ‘ "userId" : 20142100122,\n‘ + ‘ "userOperationStep" : 2,\n‘ + ‘ "appPlatform": "android",\n‘ + ‘ "app" : 0,\n‘ + ‘ "videoId":123123\n‘ + ‘ }‘; $.ajax({ url : ‘http://localhost:81/online-2c/api/vippromotion‘, type : ‘POST‘, dateType : ‘json‘, contentType : ‘application/json‘, data:data, success : function(msg){ console.log(msg); } })
辦法二
修改後台代碼,去除@RequestBody註解。這樣的話你傳輸過去的就是一個對象了,並一一對應,如果沒有的話就為空白。前端js代碼不變。
防止
根據前後天的資料互動類型來進行選擇。
Ajax json互動和SpringMVC中@RequestBody