四类请求方法

  • Get
  • Post
  • Put
  • Delete

其中发axios自动发json的是Post和Delete,而Get和Put请求则是发k=v的表单形式,这一块有时候比较混乱,我试着给大家解释一下

Get发参数

发一个对象

axios.get('url',{params:{Student:this.addForm}}).then(res=>{
	..
})//发送表单对象

后端接这个对象,因为不是发的Json,千万不要加@RequestBody

@GetMapping("/")
public Object addItem(@RequestParam(value="Student")Student stu){
...
}

Get发一堆属性

axios.get('url',{params:{id:this.addForm.id,name:this.addForm.name,pageNumber:1,pageSize:2}}).then(res=>{
	..
})//发送表单对象

后端可以自动组装成对象,而pojo中没有的属性会剩余出来去找参数中有无和前端发的参数名称一致的变量,进而被后端接到
比如pageSize,并不在pojo类中,它就会被参数中的pageSize获取到

@GetMapping("/")
public Object addItem(@RequestParam(required =false)Student stu,int pageNumber,int pageSize){
...
}

Post请求

发json

axios.post('url',this.formData).then(response=>{
	...
})

这种方式它自动发的json字符串
所以后端需要@RequestBody来讲json转为对象,对象中没有的属性,会自动映射到变量中

@GetMapping("/")
public Object addItem(@RequestBody Student stu,int pageNumber,int pageSize){
...
}

发x-www-form-urlencoded

如果想打破axios这种发post请求自动发json的规则可以用qs 我前面的文章有介绍过大家可以取看一下,就是将json格式的请求转为k=v的形式,后端不需要任何注解,直接可以接到,大概像这样
在这里插入图片描述
而后台
在这里插入图片描述
没有什么问题

RestFul风格的请求

  • 单个参数
  • 如何发对象

单个参数的RestFul

http://localhost:8080/stu/1

这是没问题的
比如

axios.get('/stu/1').then(response=>{
	...
})

后端

@GetMapping('/stu/{id}')
public Result selectStu(@PathVariable int id){
	...
}

发送对象直接不需要@PathVariable注解了

axios.get('/stu/1/张三').then(response=>{
	...
})
@GetMapping('/stu/{id}/{name}')
public Result selectStu(Student stu){
	...
}

Get Post都是可以的

总结

@RequestParam对应前端get请求,不能够解析json格式的请求
@RequestBody对应前端post请求,能够将json映射到我们的pojo对象中,倘若前端用了qs,那就不能用@RequestBody了
@PathVariable对应Rest风格的请求,有两种场景,发单个参数和发对象,单个参数需要@PathVariable这个注解,对象则不需要

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐