参数验证
注解位置
@Validated
:用在类、方法和方法参数@Valid
:用在方法、构造函数、方法参数和成员属性(字段)
分组验证
@Validated
:支持@Valid
:不支持
嵌套验证
@Validated
:不支持@Valid
:支持
@NotEmpty
用于验证一个字符串、集合或数组是否为空。它检查目标对象是否为 null,并且长度是否为零。
@NotBlank
用于验证字符串是否为空,但它比 @NotEmpty
更严格,它会去除字符串两端的空格,并验证处理后的字符串是否为空。因此,@NotBlank
只适用于字符串类型的字段。
@NotNull
它只检查目标字段是否为 null。这意味着它适用于所有类型的字段,包括字符串、对象、基本数据类型等。
@Min
验证 Number 和 String 对象是否大等于指定的值
@Max
验证 Number 和 String 对象是否小等于指定的值
@Size(min=, max=)
验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
@Length(min=, max=)
验证字符串长度是否在给定的范围之内m,ax和min是对你填的“数字”是否大于或小于指定值,这个“数字”可以是number或者string类型。长度限制用length。
@Size、@Max、@Min、这上注解是下面这个依赖包的,在SpringBoot中已经包含在starter-web中
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.2</version>
</dependency>
@Length、这个注解是下面这个依赖的,备注 springboot 2.3之之前自带hibernate-validator,之后移除了该包 :两个包选其一
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>2.7.5</version>
</dependency>
<!--<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>2.7.5</version>
</dependency>-->
@Data
public class SmsBo {
@NotBlank(message = "手机号不能为空",groups = {ValidatedGroupConfig.query.class,ValidatedGroupConfig.del.class})
private String phone;
/**
* 1:注册 2:登录 3:修改密码 4:支付密码 5:更换手机号
*/
@NotBlank(message = "类型不能为空",groups = {ValidatedGroupConfig.insert.class, ValidatedGroupConfig.update.class})
private Integer[] ids;
@NotNull
private String name;
}
@Validated分组校验实操
背景
有时我们使用实体类接收json格式参数时,可能会遇到两个接口或者多个接口可以使用同一个实体类的情况,但是不同接口对不同字段有校验限制,以修改和新增接口为例,修改接口需要校验id非空,新增接口无需校验id非空。
- groups支持类型
类型 | 备注 |
---|---|
insert | 新增 |
del | 删除 |
update | 编辑 |
query | 查询 |
@Validated(ValidatedGroupConfig.query.class)
- 将对添加
@NotBlank
,@NotBlank
,@NotNull
- 且设定groups为:
ValidatedGroupConfig.query.class
@Validated(ValidatedGroupConfig.del.class)
- 将对添加
@NotBlank
,@NotBlank
,@NotNull
- 且设定groups为:
ValidatedGroupConfig.del.class
@Validated(ValidatedGroupConfig.insert.class)
- 将对添加
@NotBlank
,@NotBlank
,@NotNull
- 且设定groups为:
ValidatedGroupConfig.insert.class
@Validated(ValidatedGroupConfig.update.class)
- 将对添加
@NotBlank
,@NotBlank
,@NotNull
- 且设定groups为:
ValidatedGroupConfig.update.class
备注
支持同时设定多个。
开启验证
在Controller中使用@Validated注解我们需要在Controller中使用@Validated注解来启用参数校验功能。这个注解可以放在Controller类上,也可以放在具体的方法上。
@Validated
- 将对添加
@NotBlank
,@NotBlank
,@NotNull
- 没有设定groups。
@SaCheckPermission("system:user:list")
@PostMapping("/list")
public TableDataInfo<SysUserVo> listPage(@RequestBody @Validated(ValidatedGroupConfig.query.class) SmsBo smsBo) {
SysUserBo user=new SysUserBo();
return baseService.selectPageUserList(user, user.getPageQuery());
}