前几天一直在看与公司项目相关的代码,今天终于有机会进行实际的开发了。
说一下今天遇到的问题。。。
前台使用ajax传递到后端的数据为对象数组的形式,如:
$.ajax({
url : '/win/getAllTopicName.action',
data:{
'topicName':"专题视频2",
'cameralInfo':[
{"name":"lee","age":3},
{"name":"lee","age":3},
{"name":"lee","age":4},
{"name":"lee","age":7}
])
},
contentType:"application/x-www-form-urlencoded; charset=utf-8",
type : 'get',
async : false,
success : function (data) {
alert(data);
}
});
后台springMV使用的数据接收方式为:
public String saveTopic(String topicName,String cameralInfo)
这样接收到的数据总是null,通过测试发现,当前端传递数组时,会自动将传递的参数的名称后面加上[],即实际的参数名为cameralInfo[], 因此我们使用cameralInfo 是无法接收到数据的,解决这个问题的方法是在ajax请求中加上traditional:true,
之后我们发现能接收到数据了,但是接收到的数据为[{object,object}{object,object}]的形式,及无法解析到数组中的对象值,按照平时的解决方法是在前台将数组对象使用逗号分隔,转换成字符串,后台再进行解析。
实际上更简单的操作方式是使用JSON 的stringify()方法,该方法能够将对象类型转换成字符串,具体的用法可以参考http://www.jb51.net/article/29893.htm
最终将ajax传递数组对象的方式改为
$.ajax({
url : '/win/getAllTopicName.action',
data:{
'topicName':"专题视频2",
'cameralInfo':JSON.stringify([
{"name":"lee","age":3},
{"name":"lee","age":3},
{"name":"lee","age":4},
{"name":"lee","age":7}
])
},
traditional:true,
contentType:"application/x-www-form-urlencoded; charset=utf-8",
type : 'get',
async : false,
success : function (data) {
alert(data);
}
});
这样就能在后台使用string来接收参数,在使用JSONArray.parseArray()方法将其转换为JSONArray的形式,这样就能更方便的对其进行操作。
希望能对碰到此类问题的博友们有帮助。。。。