Skip to content

Commit cef9781

Browse files
committed
Fixed regression in SpringValidatorAdapter's retrieval of invalid values
Issue: SPR-10243
1 parent 19eecb1 commit cef9781

File tree

2 files changed

+4
-6
lines changed

2 files changed

+4
-6
lines changed

spring-context/src/main/java/org/springframework/validation/beanvalidation/SpringValidatorAdapter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,8 @@ protected void processConstraintViolations(Set<ConstraintViolation<Object>> viol
130130
}
131131
else {
132132
Object invalidValue = violation.getInvalidValue();
133-
if (field.contains(".") && !field.contains("[]")) {
133+
if (!"".equals(field) && (invalidValue == violation.getLeafBean() ||
134+
(field.contains(".") && !field.contains("[]")))) {
134135
// Possibly a bean constraint with property path: retrieve the actual property value.
135136
// However, explicitly avoid this for "address[]" style paths that we can't handle.
136137
invalidValue = bindingResult.getRawFieldValue(field);

spring-context/src/test/java/org/springframework/validation/beanvalidation/ValidatorFactoryTests.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,14 @@
3535
import javax.validation.constraints.NotNull;
3636

3737
import org.hibernate.validator.HibernateValidator;
38-
import org.junit.Ignore;
3938
import org.junit.Test;
4039

4140
import org.springframework.validation.BeanPropertyBindingResult;
4241
import org.springframework.validation.Errors;
4342
import org.springframework.validation.FieldError;
4443
import org.springframework.validation.ObjectError;
4544

46-
import static org.hamcrest.Matchers.instanceOf;
45+
import static org.hamcrest.Matchers.*;
4746
import static org.junit.Assert.*;
4847

4948
/**
@@ -105,7 +104,6 @@ public void testSimpleValidationWithClassLevel() throws Exception {
105104
}
106105

107106
@Test
108-
@Ignore
109107
public void testSpringValidationFieldType() throws Exception {
110108
LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
111109
validator.afterPropertiesSet();
@@ -115,8 +113,7 @@ public void testSpringValidationFieldType() throws Exception {
115113
BeanPropertyBindingResult errors = new BeanPropertyBindingResult(person, "person");
116114
validator.validate(person, errors);
117115
assertEquals(1, errors.getErrorCount());
118-
assertThat("Field/Value type missmatch",
119-
errors.getFieldError("address").getRejectedValue(),
116+
assertThat("Field/Value type mismatch", errors.getFieldError("address").getRejectedValue(),
120117
instanceOf(ValidAddress.class));
121118
}
122119

0 commit comments

Comments
 (0)