我们大概都知道,使用Ajax传递简单参数到服务器端(SpringMVC)的方法,如下:
$.ajax({ type : "POST", url : CONFIG.mec_otm.order + "/cancel", data : { "results" : "cmower", }, dataType : "json", success : function(json) { } });
但如果想要传递一个像List<SelfOrder>这样的复杂对象(一个 java.util.List 中放了自定义对象com.cmower.database.entity.selforder.SelfOrder)呢?
怎么办呢?
想一想,可以在Ajax传递参数的时候把复杂对象转成JSON字符串,然后在服务器端获取JSON字符串后再转成List<SelfOrder>。
好像有道理,是吧?
那具体怎么做呢?
先来看客户端代码,我们假设有一个datatables的Table,支持多选
// 获取datatables选择的项目,支持多选,因此获取的结果为一个数组 var _getSelects = function() { var results = []; self_order_table.rows({ selected : true }).data().each(function(selfOrder, i) { var result = {}; result["scode"] = selfOrder.scode; result["id"] = selfOrder.id; results[i] = result; }); return results; }; $("#orderBtn").click(function(event) { var results = _getSelects(); $.ajax({ type : "POST", url : CONFIG.mec_otm.order + "/cancel", data : { "results" : JSON.stringify(results),//转成json字符串 }, dataType : "json", success : function(json) { }); return false; });
然后服务器端获取的方法也很简单:
@RequestMapping("cancel") public ModelAndView cancel() { String jsonStr = getPara("results"); if (StringUtils.isEmpty(jsonStr)) { throw new OrderException("请选择要撤单的项目"); } List<SelfOrder> list = JSON.parseArray(jsonStr, SelfOrder.class); }
可以利用fastjson(JSON.parseArray)对json字符串转成目标的复杂对象。