Validator 的使用(springboot)
Validator 的简单介绍
记得前端时间接写前端页面对表单验证的时候的使用过 validator ,今天在项目中再次遇到。想总结一下以供日后使用!!
首先 spring-boot-starter-web包里面有hibernate-validator包,不需要引用hibernate validator依赖。
常见的注解
Bean Validation 中内置的 constraint
@Null 被注释的元素必须为 null
@NotNull 被注释的元素必须不为 null
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max=, min=) 被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式
Hibernate Validator 附加的 constraint
@NotBlank(message =) 验证字符串非null,且长度必须大于0
@Email 被注释的元素必须是电子邮箱地址
@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range(min=,max=,message=) 被注释的元素必须在合适的范围内
代码实现
1.创建一个简单的实体类
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
public class User {
@NotBlank(message="昵称不能为空")
private String name;
@NotNull
private int age;
@NotBlank(message="地址不能为空")
private String adress;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getAdress() {
return adress;
}
public void setAdress(String adress) {
this.adress = adress;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + ", adress=" + adress + "]";
}
}
2.创建一个工具类供日后使用
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
public class ValidatorUtils {
private static Validator validator;
static {
validator =Validation.buildDefaultValidatorFactory().getValidator();
}
//第二种方式创建Validator
// static {
// ValidatorFactory validatorFactory = Validation.byProvider( HibernateValidator.class )
// .configure()
// .failFast(true)
// .buildValidatorFactory();
// validator = validatorFactory.getValidator();
// }
public static List<String> validateEntity(Object object,Class<?>... groups) {
Set<ConstraintViolation<Object>> validate = validator.validate(object, groups);
// ConstraintViolation<Object> constraint = validate.iterator().next();
List<String> list = new ArrayList<>();
for(ConstraintViolation<Object> aa :validate) {
list.add(aa.getMessage());
}
return list;
}
}
在项目中直接将 validateEntity 类中的 list 抛出错误即可 ,想测试使用结果…
使用 validator =Validation.buildDefaultValidatorFactory().getValidator();
创建 validator 将默认将获得所有错误!
第二种创建方式 .failFast(true) 为true 时 也会获得所有错误,为false时 只有一种错误,又称快速失败!看个人业务需求!
3.写一个接口验证一下
使用测试工具测试:
测试成功!!!!