2012-04-03 12 views
0

verletzt wird habe ich den folgenden Code für meine benutzerdefinierte Constraint:keine Fehlermeldung, wenn benutzerdefinierte Einschränkung

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

Und der Validator-Klasse:

public class MinMaxValidator implementiert 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; 
} 

}

jetzt, wenn ich meine Entitybean mit meiner Annotation annotieren und versuchen, in einem Objekt zu übergeben, die meine Einschränkung mit folgendem Code verletzt:

validator.validate(obj); 

es funktioniert, aber es gibt keine Fehlermeldung ... Ist hier etwas fehlt? Wie kann ich es verwalten, die Standardfehlermeldung "MinMax-Einschränkung wurde verletzt" auszugeben?

thx

Antwort

0

ich es herausgefunden, wie Sie die Fehlermeldung in der Annotation definiert ausdrucken können:

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

prost

1

Validator.validate() Verfahren wirft nicht die ConstraintValidationException. Es gibt Set<ConstraintViolation> zurück, Sie sind dafür verantwortlich, die Ausnahme zu werfen, wenn es Einschränkungsverletzungen gibt.

Die typische würde Nutzungsmuster sein:

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

hallo und danke für deine Antwort. Das Set benötigt einen Typparameter. Setzen Sie > cvs; Der Konstruktor von ConstraintViolationException akzeptiert dies jedoch nicht. (Der Konstruktor ConstraintViolationException (Set >) ist nicht definiert): / – Moonlit

Verwandte Themen