Skip to content

参数验证

注解位置

  • @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中

xml
<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>2.0.2</version>
</dependency>

@Length、这个注解是下面这个依赖的,备注 springboot 2.3之之前自带hibernate-validator,之后移除了该包 :两个包选其一

xml
<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>-->
java
@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)

  1. 将对添加@NotBlank,@NotBlank,@NotNull
  2. 且设定groups为:ValidatedGroupConfig.query.class

@Validated(ValidatedGroupConfig.del.class)

  1. 将对添加@NotBlank,@NotBlank,@NotNull
  2. 且设定groups为:ValidatedGroupConfig.del.class

@Validated(ValidatedGroupConfig.insert.class)

  1. 将对添加@NotBlank,@NotBlank,@NotNull
  2. 且设定groups为:ValidatedGroupConfig.insert.class

@Validated(ValidatedGroupConfig.update.class)

  1. 将对添加@NotBlank,@NotBlank,@NotNull
  2. 且设定groups为:ValidatedGroupConfig.update.class

备注

支持同时设定多个。

开启验证

在Controller中使用@Validated注解我们需要在Controller中使用@Validated注解来启用参数校验功能。这个注解可以放在Controller类上,也可以放在具体的方法上。

@Validated

  1. 将对添加@NotBlank,@NotBlank,@NotNull
  2. 没有设定groups。
java
@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());
}

Released under the MIT License.