我们大概都知道,使用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字符串转成目标的复杂对象。