@RequestParam,@RequestBody,@ResponseBody,@PathVariable注解的一点小总结

一、前提知识:

http协议规定一次请求对应一次响应,根据不同的请求方式,请求的内容会有所不同;

发送GET请求是没有请求体的,参数会直接拼接保留到url后一并发送;

而POST请求是带有请求体的,带着请求体一并发送,每次请求请求体只会有一个;

二、注解介绍

@RequestParam注解:将返回到后端的请求参数绑定到控制器方法参数,该注解有两个需要了解的属性

一个是required属性,默认是true

当该属性为true的时候,且指定了value属性时,如果前台页面的key跟接收的value不同是是会报400错误的;

而当该属性为false的是会,即使key不存在,也不会报400的错;

⚠️但是当后面的参数的基本数据类型的时候,是会报500错误的,因为当找不到值的时候,会默认返回一个null,基本数据类型接收到null,直接就会报错,解决方法就是使用对应的引用类型去接收,即使时null也不会报错

 

另一个是defaultValue属性,默认值是16个Unicode字符

使用了该属性之后,且指定了value属性,但是前端页面并没有给对应的key时,就会默认采用这个自动值,底层会帮我们自动转换成参数类型

⚠️ 绑定的方法参数是附加到url后的[key-value]格式的值,进而衍生出也可以是数组、对象或者集合,接下来会进行演示

 

@RequestBody跟@ResponseBody:这两个注解的作用其实是一样的,处理的都是json字符串,只不过前一个注解是从前往后传,第二个注解是从后往前传,接下来也会样式这两个注解的使用方式

⚠️ 所以讲到这里其实应该明白,@RequestBody注解在一个方法中只会出现一次,而@RequestParam则可以出现多个,这是因为@RequestBody接收的是整个请求体的json格式化字符串,而@RequestParam接收的是附加到url后面的[key-value]形式值,会存在多个这样的值,所以自然也可以使用多个@RequestParam注解来接收,如果是较少的参数那还好,如果太多的参数,一个一个获取就太麻烦了,而且写出来的代码也不够优雅整洁。

@PathVariable的作用其实就是接收url后面传过来的变量,这个注解使用起来很简单

 

三、注解的简单演示

是基于springboot环境,使用postman来测试

一、@RequestParam注解

简单使用,接收url后面的 key-value值

//测试的接口 : localhost:8080/testRequestParam/one?name=Amg&age=22 ​ @RestController @RequestMapping("/testRequestParam") public class TestRequestParamAnno { ​ @GetMapping("/one") public Result one(@RequestParam(value = "name") String name, @RequestParam(value = "age") int age){ System.out.println(name + " / " + age); return ResultGenerator.getSuccessful(name + " / " + age); } ​ } ​ //output ResultGenerator返回的是一个对象,通过@ResponseBody转换成json字符串格式 { "code": 200, "msg": "Amg / 22" }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgjjjp.html