这里写目录标题

  • 环境搭建
  • 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"));
    }
}

项目结构

java spring判断参数是否使用了注解 spring注解里面使用参数_json

@PathVariable

是什么

通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx“) 绑定到后端参数

怎么用

这是一个最基本的使用,根据url中用{}获取到这个占位符的数值来赋值给id

@GetMapping("/get/{id}")
    public User get(@PathVariable("id") Long id){
        return hashMap.get(id);
    }

结果

java spring判断参数是否使用了注解 spring注解里面使用参数_java_02

@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);
    }

结果

java spring判断参数是否使用了注解 spring注解里面使用参数_json_03

2.参数不一致

凭借在url后面的参数不是id变成uid,这时候就可以用注解中的值来获取这个uid值赋值给我们要的参数

@GetMapping("/get")
    public User get3(@RequestParam("uid") Long id){
        return hashMap.get(id);
    }

错误请求方式

java spring判断参数是否使用了注解 spring注解里面使用参数_数据库_04


正确的请求方式

java spring判断参数是否使用了注解 spring注解里面使用参数_spring_05

@RequestBody

是什么

@requestBody是用来获取传递过来的请求体数据,并反序列化成自己想要的数据
所以一般搭配post请求用,但是我没记错的话应该不可以搭配get请求吧

怎么用

1.简单数据类型

不用,基本数据类型直接在url?的形式拼接在url后面

@PostMapping("/add")
    public String add( String id){
        return "获得数据id="+id;
    }

结果

java spring判断参数是否使用了注解 spring注解里面使用参数_spring_06


当然我们也可以放在请求体中用application/x-www-form-urlencoded方式提交

java spring判断参数是否使用了注解 spring注解里面使用参数_json_07

2.对象

如果不用@requestbody

@PostMapping("/adduser")
    public User adduser(User user){
        hashMap.put(user.getId(),user);
        return hashMap.get(user.getId());
    }

可以通过拼接url组成这个对象

java spring判断参数是否使用了注解 spring注解里面使用参数_json_08


当然我们也可以放在请求体中用application/x-www-form-urlencoded方式提交

java spring判断参数是否使用了注解 spring注解里面使用参数_java_09


那么这个注解应该怎么用呢?

@PostMapping("/adduser")
    public User adduser(@RequestBody User user){
        hashMap.put(user.getId(),user);
        return hashMap.get(user.getId());
    }

这时候应该以设置请求头application/json

然后json方式请求

java spring判断参数是否使用了注解 spring注解里面使用参数_json_10

3.集合

先看看方法

@PostMapping("/adduser")
    public HashMap<Long, User> adduser(@RequestBody List<User> list){
        for (User user:list){
            hashMap.put(user.getId(),user);
        }
        return hashMap;
    }

如何请求

java spring判断参数是否使用了注解 spring注解里面使用参数_json_11


结果

java spring判断参数是否使用了注解 spring注解里面使用参数_java_12

结论

所有总归来说@RequestBody使用访问应该要
设置请求头Content-Type:application/json
然后后端才能够根据请求体中自动转化为对象
适合数据多的放在请求体中!

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