参考:
总结——》【Java】
场景:使用Hibernate Validator 进行参数验证。
Hibernate Validator有2种验证模式:
- 普通模式
- 快速失败返回模式,failFast:true
Hibernate Validator有 2 种验证模式:
- 普通模式:failFast = false
- 快速失败返回模式:failFast = true
设置验证模式 failFase 有 2 种方法:
- failFast(Boolean.TRUE)
- addProperty(“hibernate.validator.fail_fast”,“true”)
1、普通模式
会校验完所有的属性,然后返回所有的验证失败信息
2、快速失败返回模式
只要有一个验证失败,则返回
import com.eju.houseparent.common.model.BusinessException;
import lombok.Data;
import lombok.experimental.Accessors;
import org.hibernate.validator.HibernateValidator;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import javax.validation.constraints.Max;
import java.util.Set;
/**
* @ClassName Test
* @Description
* @Author 小仙
* @Version
* @Date 2021/5/24 10:22
*/
public class Test {
static Validator validator;
static {
ValidatorFactory factory = Validation.byProvider(HibernateValidator.class)
.configure()
.failFast(Boolean.TRUE)
// .addProperty("hibernate.validator.fail_fast","true")
.buildValidatorFactory();
validator = factory.getValidator();
}
private static void valid(Object object, Class<?>... groups) {
Set<ConstraintViolation<Object>> validate = validator.validate(object, groups);
if (!validate.isEmpty()) {
for (ConstraintViolation<Object> v : validate) {
System.out.println(String.format("%s:%s", v.getPropertyPath(), v.getMessage()));
throw new BusinessException(0, String.format("%s:%s", v.getPropertyPath(), v.getMessage()));
}
}
}
public static void main(String[] args) {
Student student = new Student().setName("小明").setAge(12).setSex("男");
valid(student);
}
}
@Data
@Accessors(chain = true)
class Student {
@Max(1)
private Integer age;
private String sex;
private String name;
}