问题描述:工作上遇到了一个小问题,前端页面用的是一个大对象,封装了4个数组,每个数组里又放了不同的对象。然后后端Controller也是按同样的层次结构和属性名称接收的,但就是接收不到数据。
例子:
前端JS代码
var user={}; var imageArray = []; var textArray = new Array(); $("*[name=img_url]").each(function (i, n) { var _obj = $(this); var img_url = _obj.val(); if (img_url!=""&&img_url!=null) { var ImageVo ={}; ImageVo.imageurl=img_url; imageArray.push(ImageVo); } }); $("*[name=text]").each(function (i, n) { var _obj = $(this); var textInfo= _obj.val(); if (text!=""&&text!=null) { var textVo ={}; textVo .text=textInfo; textArray .push(textVo); } }); user.images = imageArray; user.texts = imageArray; var jsonData = { "user":user }; $.ajax({ type : "post", url: "/test", dataType:"json", cache:false, async:false, data: "use="+JSON.stringify(user), success:function(data){ 代码逻辑... } });
后台是这样接收的:
VO类:
public class UserVo { private List<ImageVo> images = new ArrayList<ImageVo>(); private List<TextVo> texts = new ArrayList<TextVo>(); 此处省略了get/set方法 }
public class ImageVo { private String imageurl; 此处省略了get/set方法 }
public class TexteVo { private String text; 此处省略了get/set方法 }
Controller:
@RequestMapping(value = "/test", method = RequestMethod.POST) public @ResponseBody Map<String, Object>test(String user) { Gson gson = new Gson(); Use user = gson.fromJson(user, new TypeToken<UserVo>() { }.getType()); }
总结:前端现将数据转换成JSON,传到后台,然后通过Gson再将JSON转回对应的对象