Fixed regression in SpringValidatorAdapter's retrieval of invalid values

Issue: SPR-10243
This commit is contained in:
Juergen Hoeller 2013-02-11 12:21:46 +01:00
parent 19eecb151b
commit cef97819c5
2 changed files with 4 additions and 6 deletions

View File

@ -130,7 +130,8 @@ public class SpringValidatorAdapter implements SmartValidator, javax.validation.
} }
else { else {
Object invalidValue = violation.getInvalidValue(); Object invalidValue = violation.getInvalidValue();
if (field.contains(".") && !field.contains("[]")) { if (!"".equals(field) && (invalidValue == violation.getLeafBean() ||
(field.contains(".") && !field.contains("[]")))) {
// Possibly a bean constraint with property path: retrieve the actual property value. // Possibly a bean constraint with property path: retrieve the actual property value.
// However, explicitly avoid this for "address[]" style paths that we can't handle. // However, explicitly avoid this for "address[]" style paths that we can't handle.
invalidValue = bindingResult.getRawFieldValue(field); invalidValue = bindingResult.getRawFieldValue(field);

View File

@ -35,7 +35,6 @@ import javax.validation.Valid;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import org.hibernate.validator.HibernateValidator; import org.hibernate.validator.HibernateValidator;
import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;
import org.springframework.validation.BeanPropertyBindingResult; import org.springframework.validation.BeanPropertyBindingResult;
@ -43,7 +42,7 @@ import org.springframework.validation.Errors;
import org.springframework.validation.FieldError; import org.springframework.validation.FieldError;
import org.springframework.validation.ObjectError; import org.springframework.validation.ObjectError;
import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*; import static org.junit.Assert.*;
/** /**
@ -105,7 +104,6 @@ public class ValidatorFactoryTests {
} }
@Test @Test
@Ignore
public void testSpringValidationFieldType() throws Exception { public void testSpringValidationFieldType() throws Exception {
LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
validator.afterPropertiesSet(); validator.afterPropertiesSet();
@ -115,8 +113,7 @@ public class ValidatorFactoryTests {
BeanPropertyBindingResult errors = new BeanPropertyBindingResult(person, "person"); BeanPropertyBindingResult errors = new BeanPropertyBindingResult(person, "person");
validator.validate(person, errors); validator.validate(person, errors);
assertEquals(1, errors.getErrorCount()); assertEquals(1, errors.getErrorCount());
assertThat("Field/Value type missmatch", assertThat("Field/Value type mismatch", errors.getFieldError("address").getRejectedValue(),
errors.getFieldError("address").getRejectedValue(),
instanceOf(ValidAddress.class)); instanceOf(ValidAddress.class));
} }