From 205b5a477b32ce5cbc7b52b18d64d2629f8cd343 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Sat, 7 Nov 2009 01:29:50 +0000 Subject: [PATCH] JSR-303 Validator will only register validation failures if no binding failure happened --- .../beanvalidation/SpringValidatorAdapter.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/org.springframework.context/src/main/java/org/springframework/validation/beanvalidation/SpringValidatorAdapter.java b/org.springframework.context/src/main/java/org/springframework/validation/beanvalidation/SpringValidatorAdapter.java index 60649a37a8b..43fa046ee57 100644 --- a/org.springframework.context/src/main/java/org/springframework/validation/beanvalidation/SpringValidatorAdapter.java +++ b/org.springframework.context/src/main/java/org/springframework/validation/beanvalidation/SpringValidatorAdapter.java @@ -22,6 +22,7 @@ import javax.validation.metadata.BeanDescriptor; import org.springframework.util.Assert; import org.springframework.validation.Errors; +import org.springframework.validation.FieldError; import org.springframework.validation.Validator; /** @@ -68,10 +69,14 @@ public class SpringValidatorAdapter implements Validator, javax.validation.Valid public void validate(Object target, Errors errors) { Set> result = this.targetValidator.validate(target); for (ConstraintViolation violation : result) { - errors.rejectValue(violation.getPropertyPath().toString(), - violation.getConstraintDescriptor().getAnnotation().annotationType().getSimpleName(), - violation.getConstraintDescriptor().getAttributes().values().toArray(), - violation.getMessage()); + String field = violation.getPropertyPath().toString(); + FieldError fieldError = errors.getFieldError(field); + if (fieldError == null || !fieldError.isBindingFailure()) { + errors.rejectValue(field, + violation.getConstraintDescriptor().getAnnotation().annotationType().getSimpleName(), + violation.getConstraintDescriptor().getAttributes().values().toArray(), + violation.getMessage()); + } } }