@RequestBody、 @RequestParam 、 @PathVariable 和 @Vaild 注解的使用及区别

@RequestBody

@RequestBody 主

要用来接收前端传递给后端的 json 字符串中的数据(请求体中的数据);

Get 方式无请求体,所以使用 @RequestBody 接收数据时,前端不能使用 Get 方式提交数据;
而是使用 Post 方式进行提交的。在后端的同一个接收方法里,@RequestBody 与 @RequestParam() 可以同时使用; @RequestBody 最多只能有一个,而 @RequestParam() 可以有多个。

  • 注:一个请求,只有一个 RequestBody;一个请求,可以有多个 RequestParam。

注:当同时使用 @RequestParam()和 @RequestBody时:

    @RequestParam()指定的参数可以是普通元素、 数组、集合、对象等等
    
    (即当:@RequestBody 与 @RequestParam() 可以同时使用时,原 SpringMVC 接收参数的机制不变,
    只不过 RequestBody 接收的是请求体里面的数据;
    而 RequestParam 接收的是 key-value 里面的参数,所以它会被切面进行处理从而可以用普通元素、
    数组、集合、对象等接收)
    
    即:如果参数时放在请求体中,传入后台的话,那么后台要用 @RequestBody 才能接收到;如果不是放
    在请求体中的话,那么后台接收前台传过来的参数时,要用 @RequestParam 来接收,或则形参前什么
    也不写也能接收。

注:如果参数前写了 @RequestParam(xxx),那么前端必须有对应的 xxx 名字才行 (不管其是否有值,当然可以通过设置该注解的 required 属性来调节是否必须传) 如果没有 xxx 名的话,那么请求会出错,报400。

注:如果参数前不写 @RequestParam(xxx) 的话,那么就前端可以有可以没有对应的 xxx 名字才行, 如果有 xxx 名的话,那么就会自动匹配;没有的话,请求也能正确发送。

@RequestParam

@RequestParam 用于将请求参数区域的数据映射到控制层功能处理方法的参数上

  • 主要参数语法:

    @RequestParam(value=“参数名”, required=“true/false”, defaultValue="")

  • value:请求中传入参数的名称,如果不设置后台接口的 value 值,则会默认为该变量名。如下图中第一个参数如果不设置 value=“pageNum” ,则前端传入的参数名必须为 pageNum ,否则在后台接口中 pageNum 将接收不到对应的数据。
  • required:是否包含该参数,默认为 true,表示该请求路径中必须包含该参数,如果不包含就报404等错误。如果设置为 false 时,当请求中没有此参数,将会默认为 null,而对于基本数据类型的变量,则必须有值,这时会抛出空指针异常。如果允许空值,则接口中变量需要使用包装类来声明。
  • defaultValue:默认参数值,如果设置了该值,required=true 将失效,自动为 false,如果没有传该参数,就使用默认值。

 

@PathVariable

接收请求路径中占位符的值,
@PathVariable 注解可以将 URL 中占位符参数绑定到控制器处理方法的入参中;URL 中的 {xxx} 占位符可以通过 @PathVariable(“xxx“) 绑定到操作方法的入参中。
如下图示:

@Valid

  • @Valid 注解可以实现数据的验证,可以先定义实体,在实体的属性上添加校验规则,而在 Api 接收数据时添加 @valid 关键字,这时定义的实体将会开启一个校验的功能。
  • @Valid 注解用于校验时所属包为:javax.validation.Valid。

首先需要在实体类的相应字段上添加用于充当校验条件的注解,如下图示:

其次在 controller 层的方法校验的参数上添加 @Valid 注解,并且需要传入 Dto 实体类对象,用于校验获取相应字段上添加的 message 中的内容,如下图示:

  • 注:不要错用了异常类型,比如在 int 上不可用 @size

----------- @区别对比 -----------

@RequestBody注解和 @RequestParam 注解的区别

在 Get 请求中,不能使用 @RequestBody。 在 Post 请求,可以使用 @RequestBody 和 @RequestParam,但是如果使用 @RequestBody,对于参数转化的配置必须统一。

@RequestParam 注解接收的参数是来自于 requestHeader 中,即请求头。都是用来获取请求路径 url 中的动态参数。也就是在 url 中,格式为 xxx?username=123&password=456。
@RequestBody 注解接收的参数则是来自于 requestBody 中,即请求体中。

@RequestParam 注解和 @PathVariable 注解的区别

@RequestParam 和 @PathVariable 注解是用于从 request 中接收请求的,两个都可以接收参数,关键点不同的是 @RequestParam 是从 request 里面拿取值,而 @PathVariable 是从一个 url 模板里面来填充。

@RequestParam 注解是获取静态 url 传入的参数

@PathVariable 是获取请求路径中的变量作为参数,需要和 @RequestMapping(“item/{itemId}”) 配合使用。


----------- @验证信息表 -----------

验证信息的说明表
限制    说明
@Null    限制只能为null
@NotNull    限制必须不为null
@AssertFalse    限制必须为false
@AssertTrue    限制必须为true
@DecimalMax(value)    限制必须为一个不大于指定值的数字
@DecimalMin(value)    限制必须为一个不小于指定值的数字
@Digits(integer,fraction)    限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
@Future    限制必须是一个将来的日期
@Max(value)    限制必须为一个不大于指定值的数字
@Min(value)    限制必须为一个不小于指定值的数字
@Past    限制必须是一个过去的日期
@Pattern(value)    限制必须符合指定的正则表达式
@Size(max,min)    限制字符长度必须在min到max之间
@Past    验证注解的元素值(日期类型)比当前时间早
@NotEmpty    验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
@NotBlank    验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格
@Email    验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式

  • 23
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰冰很社恐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值