SpringBoot整合表单验证注解@Validated,以及分组验证

首先引入jar包

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.7.Final</version>
</dependency>

表单注解验证一般可以用来 验证用户名不能为空,邮箱格式不正确,手机号应为11位 ,但是在验证一部分字段的时候要用到分组的功能

创建一个包 名字为group包,创建两个接口类 

 

 

 类里不用写内容

 

添加字段的注解验证

@TableName("user")
@GroupSequence({Insert.class,Update.class,User.class})
public class User extends Model<User> implements Serializable {
 
    private static final long serialVersionUID=1L;
 
    @TableId(value = "ID", type = IdType.AUTO)
    private Long id;
 
    @NotEmpty(groups={Insert.class,Update.class},message = "用户名不能为空")
    @Size(groups={Insert.class,Update.class},min =  5,max = 16 ,message = "用户名要求5-16位")
    private String uName;
 
    @NotEmpty(groups={Insert.class},message = "密码不能为空")
    private String uPwd;
 
    @NotEmpty(groups={Insert.class,Update.class},message = "邮箱不能为空")
    @Email(groups={Insert.class,Update.class},message = "邮箱格式不对")
    private String uEmail;
 
    @NotEmpty(groups={Insert.class,Update.class},message = "手机号不能为空")
     @Size(groups={Insert.class,Update.class},min =  11,max = 11 ,message = "手机号为11位有效手机号")
    private String uTel;
     
    @NotEmpty(groups={Insert.class,Update.class},message = "角色不能为空")
    private String uRank;

验证前端传来的数据

@PostMapping(value = "/registerinfo")
    @ResponseBody
    public Msg register(@RequestBody @Validated({ Insert.class }) User user, BindingResult bindingResult) {
                //获取验证注解信息
        if (bindingResult.hasErrors()) {
            return Msg.failure(bindingResult.getFieldError().getDefaultMessage());
        } else {
 
            return "验证正确";
        }
 
    }

例如以上为user表的注解验证

 

@NotEmpty  不能为空    @Size  设置长度   @Emaile  设置邮箱格式   更多的注解可以页面最后查询
@GroupSequence({Insert.class,Update.class,User.class})     //引入两个接口类
@NotEmpty(groups={Insert.class},message = "密码不能为空")   //设置在 @Validated({ Insert.class }) 的时候只验证密码,   如果@Validated({ Update.class })的时候,密码就不验证了
@NotEmpty(groups={Insert.class,Update.class},message = "用户名不能为空")   //在设置 @Validated({ Insert.class })或者 @Validated({ Update.class })的时候可以验证用户名

 

验证注解

验证的数据类型

说明

@AssertFalse

Boolean,boolean

验证注解的元素值是false

@AssertTrue

Boolean,boolean

验证注解的元素值是true

@NotNull

任意类型

验证注解的元素值不是null

@Null

任意类型

验证注解的元素值是null

@Min(value=值)

BigDecimal,BigInteger, byte,

short, int, long,等任何Number或CharSequence(存储的是数字)子类型

验证注解的元素值大于等于@Min指定的value值

@Max(value=值)

和@Min要求一样

验证注解的元素值小于等于@Max指定的value值

@DecimalMin(value=值)

和@Min要求一样

验证注解的元素值大于等于@ DecimalMin指定的value值

@DecimalMax(value=值)

和@Min要求一样

验证注解的元素值小于等于@ DecimalMax指定的value值

@Digits(integer=整数位数, fraction=小数位数)

和@Min要求一样

验证注解的元素值的整数位数和小数位数上限

@Si***=下限, max=上限)

字符串、Collection、Map、数组等

验证注解的元素值的在min和max(包含)指定区间之内,如字符长度、集合大小

@Past

java.util.Date,

java.util.Calendar;

Joda Time类库的日期类型

验证注解的元素值(日期类型)比当前时间早

@Future

与@Past要求一样

验证注解的元素值(日期类型)比当前时间晚

@NotBlank

CharSequence子类型

验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的首位空格

@Length(min=下限, max=上限)

CharSequence子类型

验证注解的元素值长度在min和max区间内

@NotEmpty

CharSequence子类型、Collection、Map、数组

验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)

@Range(min=最小值, max=最大值)

BigDecimal,BigInteger,CharSequence, byte, short, int, long等原子类型和包装类型

验证注解的元素值在最小值和最大值之间

@Email(regexp=正则表达式,

flag=标志的模式)

CharSequence子类型(如String)

验证注解的元素值是Email,也可以通过regexp和flag指定自定义的email格式

@Pattern(regexp=正则表达式,

flag=标志的模式)

String,任何CharSequence的子类型

验证注解的元素值与指定的正则表达式匹配

@Valid

任何非原子类型

指定递归验证关联的对象;

如用户对象中有个地址对象属性,如果想在验证用户对象时一起验证地址对象的话,在地址对象上加@Valid注解即可级联验证

 

posted @ 2019-12-24 14:07  KKKKKKKf  阅读(4994)  评论(0编辑  收藏  举报