2012-04-03 72 views
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約束已被違反」?

THX

回答

0

我想通了如何可以打印出在註釋中定義的錯誤消息:

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

歡呼

1

Validator.validate()方法並不投擲ConstraintValidationException。它返回Set<ConstraintViolation>,如果存在任何約束違規,則負責拋出異常。

的典型使用模式是:

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

喜謝謝爲你的答案。該集合需要一個類型參數。設置> cvs;但ConstraintViolationException的構造函數不接受它。 (構造函數ConstraintViolationException(Set >)未定義):/ – Moonlit 2012-04-03 22:46:39