关于Spring常用基础的参数注解

本文详细介绍了SpringBoot框架下RESTful API的参数处理方式,包括如何使用@PathVariable、@RequestParam和@RequestBody注解来获取URL路径参数、查询字符串参数及请求体中的数据。

环境搭建

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
然后后端才能够根据请求体中自动转化为对象
适合数据多的放在请求体中!

有问题或者写错了可以在下面评论!
深漂一年的精神小伙!
高速解答!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值