SpringValidationAdapter properly detects invalid value for JSR-303 field-level bean constraints
Issue: SPR-9332
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2012 the original author or authors.
|
||||
* Copyright 2002-2013 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -99,7 +99,8 @@ public class SpringValidatorAdapter implements SmartValidator, javax.validation.
|
||||
}
|
||||
}
|
||||
}
|
||||
processConstraintViolations(this.targetValidator.validate(target, groups.toArray(new Class[groups.size()])), errors);
|
||||
processConstraintViolations(
|
||||
this.targetValidator.validate(target, groups.toArray(new Class[groups.size()])), errors);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -114,10 +115,11 @@ public class SpringValidatorAdapter implements SmartValidator, javax.validation.
|
||||
FieldError fieldError = errors.getFieldError(field);
|
||||
if (fieldError == null || !fieldError.isBindingFailure()) {
|
||||
try {
|
||||
String errorCode = violation.getConstraintDescriptor().getAnnotation().annotationType().getSimpleName();
|
||||
Object[] errorArgs = getArgumentsForConstraint(errors.getObjectName(), field, violation.getConstraintDescriptor());
|
||||
ConstraintDescriptor<?> cd = violation.getConstraintDescriptor();
|
||||
String errorCode = cd.getAnnotation().annotationType().getSimpleName();
|
||||
Object[] errorArgs = getArgumentsForConstraint(errors.getObjectName(), field, cd);
|
||||
if (errors instanceof BindingResult) {
|
||||
// can do custom FieldError registration with invalid value from ConstraintViolation,
|
||||
// Can do custom FieldError registration with invalid value from ConstraintViolation,
|
||||
// as necessary for Hibernate Validator compatibility (non-indexed set path in field)
|
||||
BindingResult bindingResult = (BindingResult) errors;
|
||||
String nestedField = bindingResult.getNestedPath() + field;
|
||||
@@ -128,8 +130,9 @@ public class SpringValidatorAdapter implements SmartValidator, javax.validation.
|
||||
}
|
||||
else {
|
||||
Object invalidValue = violation.getInvalidValue();
|
||||
if (!"".equals(field) && invalidValue == violation.getLeafBean()) {
|
||||
// bean constraint with property path: retrieve the actual property value
|
||||
if (field.contains(".") && !field.contains("[]")) {
|
||||
// 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.
|
||||
invalidValue = bindingResult.getRawFieldValue(field);
|
||||
}
|
||||
String[] errorCodes = bindingResult.resolveMessageCodes(errorCode, field);
|
||||
|
||||
Reference in New Issue
Block a user