前臺實體對象“包裝”:
//應用情景一般是插入實體對象到數據庫啥的
//第一種方式創建方式
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”
再嘮叨幾句:
這裏只是提供技術實現,但是沒有考慮到安全性的問題,事實上應該是要根據提交特性決定該用哪種方式提交,而不是根據接收方式來決定哪種方式提交。
歡迎大佬們指正或提供更好的解決方案