springValidator

1,简介

Springboot validator实际集成了Hibernatevalidator。主要是校验用户提交的数据的合理性的,比如是否为空了,密码长度是否大于6位,是否是纯数字的,等等。方便后台的数据合法性的校验。

 

2,Demo

以新增用户为例,在页面上有两个元素:姓名输入框,密码输入库以及提交按钮。提交到后台之后,使用Validator进行校验,然后如果存在错误,转发到demo.html,我们先编写一个实体类接收用户的输入,以及使用Validator注解校验:

[java] view plain copy
 
  1. public class Demo {  
  2.     private long id;  
  3.     @NotEmpty(message="姓名不能为空")  
  4.     private String name;  
  5.       
  6.     @NotEmpty(message="密码不能为空")  
  7.     @Length(min=6,message="密码长度不能小于6位")  
  8.     private String password;  
  9. }  

 

这个实体类在属性上加入了注解@NotEmpty,@Length。

@NotEmpty表示不能为空,message是它的错误提示信息。

@Length用来验证长度,min表示最小长度不能小于6。

 

3,详细介绍每个注解

 

名称

使用描述

例子

@null

验证对象是否为空

 

@notnull

验证对象是否为非空

@NotNull(message = "身份证不能为空") 

@asserttrue

验证boolean对象是否为true

@AssertTrue(message = "")

@assertfalse

验证boolean对象是否为false

@AssertFalse(message = "")

@min

验证number和string对象是否大等于指定的值

@Min(value= 18 ,message= "必须年满18岁!")

@max

 

验证number和string对象是否小等于指定的值

@Max(value = 100, message = "年龄不能大于100岁") 

@length

验证string的长度

@Length(min = 5, max = 20, message = "用户名长度必须位于5到20之间")

@decimalmin

验证number和string对象是否大等于指定的值,小数存在精度

@DecimalMax(value="100",message="decim最大值是100")

@decimalmax

验证number和string对象是否小等于指定的值,小数存在精度

DecimalMin(value="100",message="decim最小值是100")

@size

验证对象(array,collection,map,string)长度是否在给定的范围之内

@size(min=6, max=20, message="密码长度只能在6-20之间")

@digits

验证number和string的构成是否合法

@Digits (integer= 2, fraction= 20)

@past

验证date和calendar对象是否在当前时间之前

@Past(message=””)

@future

验证date和calendar对象是否在当前时间之后

@Future(message=””)

@pattern

验证String对象是否符合正则表达式的规则

@Pattern(regexp="[a-za-z0-9._%+-]+@[a-za-z0-9.-]+\\.[a-za-z]{2,4}",message = "邮件格式错误")

@Email

验证邮箱

@Email(message = "输入正确的邮箱")  

 

4,进阶(@ScriptAssert)

如果需要校验的业务逻辑比较复杂,简单的@NotBlank,@Min注解已经无法满足需求了,这时可以使用@ScriptAssert来指定进行校验的方法,通过方法来进行复杂业务逻辑的校验,然后返回true或false来表明是否校验成功。例如下面的例子:

 

[java] view plain copy
 
  1. //通过script 属性指定进行校验的方法,传递校验的参数,  
  2. @ScriptAssert(lang="javascript",script="com.learn.validate.domain.Student.checkParams(_this.name,_this.age,_this.classes)" messgae="")  
  3. public class Student {  
  4.  private String name;  
  5.  private int age;  
  6.  private String classess;  
  7.  //注意进行校验的方法要写成静态方法,否则会出现   
  8.  //TypeError: xxx is not a function 的错误  
  9.  public static boolean checkParams(String name,int age,String classes) {  
  10.   if(name!=null&&age>8&classes!=null){  
  11.    return true;  
  12.   }else{  
  13.    return false;  
  14.   }  
  15. }  
  16. }  



5,自定义验证规则

有时候默认的规则可能还不够,有时候还需要自定义规则,比如屏蔽关键词验证是非常常见的一个功能,比如在发帖时帖子中不允许出现admin等关键词。

1、定义验证注解

 

[java] view plain copy
 
  1. @Target({FIELD, METHOD, PARAMETER, ANNOTATION_TYPE })  
  2. @Retention(RUNTIME)  
  3. //指定验证器  
  4. @Constraint(validatedBy= ForbiddenValidator.class)  
  5. @Documented  
  6. public@interfaceForbidden{  
  7.  //默认错误消息  
  8.     Stringmessage() default"{forbidden.word}";  
  9.     //分组  
  10.     Class<?>[]groups() default{};  
  11.     //负载  
  12.     Class<?extendsPayload>[]payload() default{};  
  13.     //指定多个时使用  
  14.     @Target({FIELD, METHOD, PARAMETER, ANNOTATION_TYPE })  
  15.     @Retention(RUNTIME)  
  16.     @Documented  
  17.     @interfaceList{  
  18.         Forbidden[]value();  
  19.     }  
  20. }  



 

2、定义验证器

 

[java] view plain copy
 
  1. publicclassForbiddenValidator implementsConstraintValidator<Forbidden, String> {  
  2.  privateString[]forbiddenWords = {"admin"};  
  3.     @Override  
  4.     publicvoidinitialize(ForbiddenconstraintAnnotation) {  
  5.         //初始化,得到注解数据  
  6.     }  
  7.    
  8.     @Override  
  9.     publicbooleanisValid(Stringvalue, ConstraintValidatorContext context) {  
  10.         if(StringUtils.isEmpty(value)){  
  11.             returntrue;  
  12.         }  
  13.         for(Stringword : forbiddenWords) {  
  14.             if(value.contains(word)){  
  15.                 returnfalse;//验证失败  
  16.             }  
  17.         }  
  18.         returntrue;  
  19.     }  
  20. }  



 

3、使用

 

 

 

 

 

4、当我们在提交name中含有admin的时候会输出错误消息。






posted on 2018-04-18 18:56  yangjingzhi  阅读(152)  评论(0编辑  收藏  举报

导航