0

我的自定义约束有以下代码:

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.FIELD, ElementType.METHOD })
@Constraint(validatedBy = MinMaxValidator.class)
public @interface CheckMinMax{

    String message() default "MinMax constraint has been violated";

    Class<? extends Payload>[] payload() default {};

    Class<?>[] groups() default {};

    int min() default 1;

    int max() default 10;
}

和验证器类:

公共类 MinMaxValidator 实现 ConstraintValidator {

int max;
int min;

@Override
public void initialize(CheckMinMax annotation) {
    max = annotation.max();
    min = annotation.min();

}

@Override
public boolean isValid(Integer value, ConstraintValidatorContext arg1) {
    if (value < min || value > max)
        return false;
    return true;
}

}

现在,当我用我的注释注释我的 entitybean 并尝试使用以下代码传入一个违反我的约束的对象时:

validator.validate(obj);

它可以工作,但没有错误消息......这里有什么遗漏吗?我如何管理它以输出默认错误消息“MinMax 约束已被违反”?

谢谢

4

2 回答 2

1

Validator.validate()方法没有抛出 ConstraintValidationException。它返回Set<ConstraintViolation>,如果有任何约束违规,您有责任抛出异常。

典型的使用模式是:

Set<ConstraintViolation> cvs = validator.validate(obj);
if(cvs.size() > 0){
  throw new ConstraintViolationException(cvs);
}
于 2012-04-03T21:35:05.010 回答
0

我想出了如何打印出注释中定义的错误消息:

Set<ConstraintViolation<TypeOfObj> cvs = validator.validate(obj);
for(ConstraintViolation<TypeOfObj> violation : cvs) 
{
    logger.info(violation.getMessage());
}

干杯

于 2012-04-05T22:51:04.570 回答