前台传入的JSON对象在后台以实体对象为入参接收

前台实体对象“包装”:

//应用情景一般是插入实体对象到数据库啥的
//第一种方式创建方式
var xxxEntity = {
	//实体对象的属性值
	"id" : 1; 
	"name" : 'Ben';
	"age" : 23;
}
//第二种创建方式
var xxxEntity = {};
xxxEntity.id = 1;
xxxEntity.name = 'Ben';
xxxEntity.age = 23;

前台ajax书写:

$.ajax({
	type: "POST", //注意是POST方式提交
	url: 'xxx',
	contentType: "application/json", //这个不能漏
	data: JSON.stringify(xxxEntity),  //这个也不能漏,将对象(或数组)转换成json字符串
	success: function(r){
		//成功返回后的操作
	}
});

后台controller接收:

@RequestMapping("/create")
public void create(@RequestBody XxxEntity xxxEntity){ //注意要用@RequstBody
	//对实体对象的操作
}

扩展:
当传参是Map类型的

//前台
$.ajax({
	type: "GET", //注意是GET方式提交
	url: 'xxx',
	contentType: "application/json", //这个不能漏
	data: {
		"data1" : aa, //'data1'作为map的key,aa是value
		"data2" : bb,
		"data3" : cc
	}
	//data: {"id" : id}
	success: function(r){
		//成功返回后的操作
	}
});

@RequestMapping("/query")
public void query(@RequestParam Map<String, String> query){ //注意要用@RequstParam
	String data1 = query.get("data1");
	//各种操作blabla..
}

总结:

  • 如果controller中要以实体对象或数组来入参,用POST + @RequestBody组合,还有前台的数据要用data: JOSN.stringify(data),进行转换成JSON字符串
  • 如果controller要以Map形式入参,用GET + @RequestParam组合,前台数据直接是data: data,不用转换
  • 记得ajax中要写contentType: “application/json”

再唠叨几句:
这里只是提供技术实现,但是没有考虑到安全性的问题,事实上应该是要根据提交特性决定该用哪种方式提交,而不是根据接收方式来决定哪种方式提交。
欢迎大佬们指正或提供更好的解决方案

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章