前臺傳入的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”

再嘮叨幾句:
這裏只是提供技術實現,但是沒有考慮到安全性的問題,事實上應該是要根據提交特性決定該用哪種方式提交,而不是根據接收方式來決定哪種方式提交。
歡迎大佬們指正或提供更好的解決方案

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