Get和Post的区别还是很大的,如果按照标准,Get请求一般是不携带参数的,并且get携带在请求体种的参数是会被忽略的(postman工具除外)。Post请求一般才被用来携带参数
@RequestParam 用于接收url地址传参,表单传参【application/x-www-form-urlencoded】,例如
@PathVariable 用于接收包含在请求路径中的参数,例如
@RequestBody 用于接收Json数据【application/json】
1.普通参数接收
1.请求url
2.前端请求代码
<script>
const request = axios.create({
baseURL: 'http://127.0.0.1:8080',
timeout: 1000,
});
let person = {
name:'ADong',
age:'20'
}
request.post('/save',null,{
params:person,
headers:{
'Content-Type':'x-www-form-urlencoded'
}
})
</script>
3.后端接收代码
@RestController
@RequestMapping
public class BasicController {
@PostMapping("/save")
public String getUserName(@RequestParam(value = "name") String userName, String age) {
System.out.println("Post 普通参数接收 =>" + userName + " - " + age);
return "ok";
}
}
2.Pojo参数接收
1.请求url
2.前端请求代码
<script>
const request = axios.create({
baseURL: 'http://127.0.0.1:8080',
timeout: 1000,
});
let person = {
name:'ADong',
age:'20'
}
request.post('/save',null,{
params:person
})
</script>
3.后端接收代码
@PostMapping("/save")
public String getUserName(User user) {
System.out.println("Post Pojo参数接收 =>" + user.toString());
return "ok";
}
3.数组参数接收
要使用qs库的情况是当后端服务器要求application/x-www-form-urlencoded格式的数据,并且要传递复杂的对象或数组作为请求体时。否则,如果后端服务器接收application/json格式的数据,并且可以正确处理复杂数据,直接使用axios的data参数传递数据是更方便的。
1.请求url
2.前端请求代码
<script>
var qs = Qs
const request = axios.create({
baseURL: 'http://127.0.0.1:8080',
timeout: 1000,
});
let likes = ['a','b','c']
request.post('/save',null,{
params:{
likes
},
paramsSerializer: function (params) {
return qs.stringify(params, { arrayFormat: 'repeat' })
},
})
</script>
3.后端接收代码
@PostMapping("/save")
public String getUserName(String[] likes) {
System.out.println("Post 数组参数接收 =>" + Arrays.toString(likes));
return "ok";
}
4.集合参数接收
1.请求url
2.前端请求代码
<script>
var qs = Qs
const request = axios.create({
baseURL: 'http://127.0.0.1:8080',
timeout: 1000,
});
let likes = ['a','b','c']
request.post('/save',null,{
params:{
likes
},
paramsSerializer: function (params) {
return qs.stringify(params, { arrayFormat: 'repeat' })
},
})
</script>
3.后端接收代码
由于List是引用类型,系统会默认造List的对象set赋值,因此需要使用@RequestParam使其作为集合的数据出现
@PostMapping("/save")
public String getUserName(@RequestParam List<String> likes) {
System.out.println("Post 集合参数接收 =>" + likes);
return "ok";
}
5.JSON数据格式接收
1.请求url
2.前端请求代码
<script>
const request = axios.create({
baseURL: 'http://127.0.0.1:8080',
timeout: 1000,
});
let likes = ['a','b','c']
request.post('/save',likes)
</script>
3.后端接收代码
@PostMapping("/save")
public String save(@RequestBody List<String> likes) {
System.out.println("Post Json集合参数接收 =>" + likes);
return "save:ok";
}
6.JSON格式POJO参数接收
1.请求url
2.前端请求代码
<script>
const request = axios.create({
baseURL: 'http://127.0.0.1:8080',
timeout: 1000,
});
let person = {
name:'aDong',
age:20
}
request.post('/save',person)
</script>
3.后端接收代码
@PostMapping("/save")
public String save(@RequestBody User user) {
System.out.println("Post JsonPojo参数接收 =>" + user.toString());
return "save:ok";
}
7.JSON格式集合Pojo参数接收
1.请求url
http://localhost:8080/save
2.前端请求代码
<script>
const request = axios.create({
baseURL: 'http://127.0.0.1:8080',
timeout: 1000,
});
let persons = [
{name:'aDong',age:20},
{name:'srd',age:21}
]
request.post('/save',persons)
</script>
3.后端接受代码
@PostMapping("/save")
public String save(@RequestBody List<User> user) {
System.out.println("Post Json集合Pojo参数接收 =>" + user);
return "save:ok";
}