用GET还是POST取决于你想传递的参数是简单类型还是复杂自定义类型?
1 Spring MVC Controller的GET可以传递JDK定义的几种基础类型
(@RequestParam Long id)&数组 (@RequestParam String[] names)
2 传递对象建议用POST,参数中写
(@RequestBody XxxRequest query)
----
这里涉及用ajax向controller发送数据。方法是将ajax发送json数据,controller获取到json数据解析封装处理。以下将介绍:1传递json数据 2并封装的做法
看图
参数接收
1、 参数是基础类型
(byte、short、int、long、float、double、boolean、char)
1.1-AJAX
$.ajax({
url : "someurl",
type : "POST",
dataType : "JSON",
data : {"name":"test", "password":"testpassword"},
success : function(data) {
console.log(data)
}
})
1.2-JAVA
@RequestMapping("someurl")
@ResponseBody //说明返回的是一个对象
public SomeData basicType(@RequestParam String name, @RequestParam String password){
//具体业务方法
}
2、 参数是简单的对象类型
简单的对象类型是指,在对象中不包含复杂的数据结构类似于list,map等。在这里可以使用标签@ModelAttribute来直接将JSON数据封装成对象。
说明:
2.1 JAVA
@RequestBody接收的是一个Json对象的字符串,而不是一个Json对象。然而在ajax请求往往传的都是Json对象,后来发现用 JSON.stringify(data)的方式就能将对象变成字符串。同时ajax请求的时候也要指定dataType: "json",contentType:"application/json" 这样就可以轻易的将一个对象或者List传到Java端,使用@RequestBody即可绑定对象或者List.
@RequestMapping(value = "saveUser", method = {RequestMethod.POST }})
@ResponseBody
publicvoidsaveUser(@RequestBody List users) {
userService.batchSave(users);
}
2.2 JavaScript
$(document).ready(function(){
var saveDataAry=[];
var data1={"userName":"test","address":"gz"};
var data2={"userName":"ququ","address":"gr"};
saveDataAry.push(data1);
saveDataAry.push(data2);
$.ajax({
type:"POST",
url:"user/saveUser",
dataType:"json",
contentType:"application/json",
data:JSON.stringify(saveData),
success:function(data){
} }); });
public class User{ //模型 用户的属性name,age
private String name;
private String address;
private int age;
//省略 getters and setters
}
@RequestMapping("/someurl")
@ResponseBody
public SomeData fun(@ModelAttribute User user){
//具体方法
}
$.ajax({
url : "someurl",
type : "POST",
dataType : "JSON",
data : {
'name : 'test',
'age' : 10
},
success : function(data) {
console.log(data)
}
})
3、参数是 复杂对象
//数据模型
public class User{
private String name;
private int age;
private List<String> names;//朋友的名字
private List<User> friends;//朋友
//getters and setters
}
@RequestMapping("someurl")
@ResponseBody
public SomeData fun(@RequestBody User user){
//方法详情
}
$.ajax({
var friends=new Array();
var u1= { 'name': '小红', 'age ': 10 };
var u2= { 'name': '小红', 'age ': 10 };
friends.push(u1);
friends.push(u2);
var user={}
user.friends=friends;
url : "someurl",
type : "POST",
dataType : "JSON",
contentType:"application/json",
data : JSON.stringify(user),
success : function(data) {
console.log(data)
}
})
4、参数是 数组类型List<T>或 T[] ( T为基本数据类型 )
$.ajax({
type: 'POST',
url: "/Api/Conversation/CancelRegister",
contentType: 'application/json;charset=utf-8',//将json数据以request payload的形式发起请求
data: JSON.stringify(listData),
success: function (response) {}
});
-------------
但是以下的三种方式,在后端都无法有效的收到数据
$.post(url,{'list':data},function(success){...})
或者
$.ajax(type:"post",data:{"list":data},success:function(success){...})
或者
varformData=new FormData();
formData.append("list",data);
$.ajax(type:"post",data:formData,success:function(success){...})
----------------------
list参数的其他问题
https://stackoverflow.com/questions/17560258/pass-array-data-from-javascript-in-browser-to-spring-mvc-controller-using-ajax/answer-17560332
-------------------------------------------------------------------------