背景:在项目开发中会有很多次需要传递一个对象或者多个对象至后台的情况。相信很多人也在传递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:文中代码不可全部相信,只是提供一种解决问题的思路。