这里写目录标题
- 环境搭建
- jar包
- 数据库
- 项目结构
- @PathVariable
- 是什么
- 怎么用
- @RequestParam
- 是什么
- 怎么用
- 1.参数一致
- 2.参数不一致
- @RequestBody
- 是什么
- 怎么用
- 1.简单数据类型
- 2.对象
- 3.集合
- 结论
环境搭建
jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.2.2.RELEASE</version>
<scope>test</scope>
</dependency>
数据库
为了图方便我就不连接数据库了,写个静态代码块,后续都用这个
@RestController
public class AnnotionController {
public static HashMap<Long, User> hashMap = new HashMap<>();
static {
hashMap.put(1L,new User(1L,"大1","大1"));
hashMap.put(2L,new User(2L,"大2","大2"));
hashMap.put(3L,new User(3L,"大3","大3"));
hashMap.put(4L,new User(4L,"大4","大4"));
hashMap.put(5L,new User(5L,"大5","大5"));
}
}
项目结构
@PathVariable
是什么
通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx“) 绑定到后端参数。
怎么用
这是一个最基本的使用,根据url中用{}获取到这个占位符的数值来赋值给id
@GetMapping("/get/{id}")
public User get(@PathVariable("id") Long id){
return hashMap.get(id);
}
结果
@RequestParam
是什么
自己理解的方式是这样的
get请求我们经常用?a=1这种方式拼接在url后面,通过&可以拼接多个参数
所以get/?a=1&b=2&c=3代表拼接3个参数
但是url长度有限,所以参数过多的时候用post请求,把要传的参数放在请求体里
而这个注解可以获取到拼接在url后面的参数
怎么用
1.参数一致
什么是参数一致,就是凭借在url后面的参数和我们要接受的参数一致
比如get?id=1 这里参数是id,我们接受的参数也是id,这就是一致
@GetMapping("/get")
public User get2(@RequestParam("id") Long id){
return hashMap.get(id);
}
结果
2.参数不一致
凭借在url后面的参数不是id变成uid,这时候就可以用注解中的值来获取这个uid值赋值给我们要的参数
@GetMapping("/get")
public User get3(@RequestParam("uid") Long id){
return hashMap.get(id);
}
错误请求方式
正确的请求方式
@RequestBody
是什么
@requestBody是用来获取传递过来的请求体数据,并反序列化成自己想要的数据
所以一般搭配post请求用,但是我没记错的话应该不可以搭配get请求吧
怎么用
1.简单数据类型
不用,基本数据类型直接在url?的形式拼接在url后面
@PostMapping("/add")
public String add( String id){
return "获得数据id="+id;
}
结果
当然我们也可以放在请求体中用application/x-www-form-urlencoded方式提交
2.对象
如果不用@requestbody
@PostMapping("/adduser")
public User adduser(User user){
hashMap.put(user.getId(),user);
return hashMap.get(user.getId());
}
可以通过拼接url组成这个对象
当然我们也可以放在请求体中用application/x-www-form-urlencoded方式提交
那么这个注解应该怎么用呢?
@PostMapping("/adduser")
public User adduser(@RequestBody User user){
hashMap.put(user.getId(),user);
return hashMap.get(user.getId());
}
这时候应该以设置请求头application/json
然后json方式请求
3.集合
先看看方法
@PostMapping("/adduser")
public HashMap<Long, User> adduser(@RequestBody List<User> list){
for (User user:list){
hashMap.put(user.getId(),user);
}
return hashMap;
}
如何请求
结果
结论
所有总归来说@RequestBody使用访问应该要
设置请求头Content-Type:application/json
然后后端才能够根据请求体中自动转化为对象
适合数据多的放在请求体中!
有问题或者写错了可以在下面评论!
深漂一年的精神小伙!
高速解答!!!