约束验证,而无需显式调用验证器

问题描述

以下示例来自here

public class Car {

    public Car(@NotNull String manufacturer) {
        //...
    }

    @ValidRacingCar
    public Car(String manufacturer,String team) {
        //...
    }

    public void drive(@Max(75) int speedInMph) {
        //...
    }

    @Size(min = 1)
    public List<Passenger> getpassengers() {
        //...
    }
}

要测试验证是否有效,他们建议使用一个验证器来检查所有验证是否有效。

ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
executableValidator = factory.getValidator().forExecutables();

Car object = new Car( "Morris" );
Method method = Car.class.getmethod( "drive",int.class );
Object[] parameterValues = { 80 };
Set<ConstraintViolation<Car>> violations = executableValidator.validateParameters(
        object,method,parameterValues
);

assertEquals( 1,violations.size() );
Class<? extends Annotation> constraintType = violations.iterator()
        .next()
        .getConstraintDescriptor()
        .getAnnotation()
        .annotationType();
assertEquals( Max.class,constraintType );

问题:是否有一种方法可以始终验证对象,而无需首先从ValidatorFactory创建验证器?这样它在构造函数中已经失败,并且该对象未实例化。与我们在@Valid中使用Spring MVC 3 Validation的情况类似。

Car car = new Car(null); //such that this already throws an error

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)