我有自定义约束的以下代码:
@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
答案 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());
}
欢呼声