违反自定义约束时没有错误消息

时间:2012-04-03 20:57:22

标签: java constraints bean-validation

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

@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;
}

还有Validator类:

公共类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约束”?

THX

2 个答案:

答案 0 :(得分:1)

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

典型的使用模式是:

Set<ConstraintViolation> cvs = validator.validate(obj);
if(cvs.size() > 0){
  throw new ConstraintViolationException(cvs);
}

答案 1 :(得分:0)

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

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

欢呼声