背景:在項目開發中會有很多次需要傳遞一個對象或者多個對象至后台的情況。相信很多人也在傳遞List<E>的時候也會遇見很多問題。比如說415錯誤,400錯誤等等。
原因:總結一下其實就是前后端數據格式不統一等原因導致,有時候可能只是json格式的鍵不對。我在此過程中碰見的情況也就是以下幾種
(1)傳遞List(User) 的情況
前端代碼:
1 var b = []; 2 var a ={}; 3 var c ={}; 4 a.name ="張三"; 5 a.age = "20", 6 b.push(a); 7 c.name ="李四"; 8 c.age = "20", 9 b.push(c); 10 $.ajax({ 11 url: '/cms/test/insertUser', 12 type: 'post', 13 dataType:"json", 14 contentType:"application/json", 15 data: JSON.stringify(b), 16 success: function(data){ 17 18 } 19 });
后端代碼:
1 @RequestMapping("insertUser") 2 @ResponseBody 3 public Map<String,Object> insertUser(@RequestBody List<User> user ){ 4 return null; 5 }
注意此時的json格式是 [{"name":"張三" , "age" : "20"},{"name":"李四" , "age" : "20"}]
(2)單個對象:
對於單個對象是最最基本的用法,此處就不再解釋。
(3)多個對象 + String/int 等基本參數
前端代碼:
var a ={"arr" :["{name: 張三,age: 24}","{name: 李四,age: 24}"] , "classRome" : "初二四班"}
$.ajax({
url: '/cms/test/insertUser', type: 'post', dataType:"json", contentType:"application/json", data: a, success: function(data){ } });
后端代碼:
@RequestMapping("insertUser") @ResponseBody public Map<String,Object> insertUser(@RequestParam(required = false ,value = "arr[]") List<String> user , String classRome){ return null; }
后端接收到為JSON - String字符串 , 然后可以通過GSON 或者其他的JSON工具轉化為相關的實體類, 注意重點測試 arr 中對象為 一個 或者是 沒有 的情況 , 可能會有異常情況發生。
PS:文中代碼不可全部相信,只是提供一種解決問題的思路。