天天看点

Java——》Hibernate Validator 参数验证1、普通模式2、快速失败返回模式

参考:

总结——》【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;
}