mirror of
https://github.com/spring-projects/spring-framework.git
synced 2026-09-24 07:39:09 +00:00
Avoid MessageFormat rendering for exception messages in binding errors
Closes gh-36609
(cherry picked from commit 0150c4ba06)
This commit is contained in:
+35
-7
@@ -16,6 +16,10 @@
|
||||
|
||||
package org.springframework.validation;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import org.jspecify.annotations.Nullable;
|
||||
|
||||
import org.springframework.beans.PropertyAccessException;
|
||||
import org.springframework.context.support.DefaultMessageSourceResolvable;
|
||||
import org.springframework.util.Assert;
|
||||
@@ -59,9 +63,8 @@ public class DefaultBindingErrorProcessor implements BindingErrorProcessor {
|
||||
String fixedField = bindingResult.getNestedPath() + missingField;
|
||||
String[] codes = bindingResult.resolveMessageCodes(MISSING_FIELD_ERROR_CODE, missingField);
|
||||
Object[] arguments = getArgumentsForBindError(bindingResult.getObjectName(), fixedField);
|
||||
FieldError error = new FieldError(bindingResult.getObjectName(), fixedField, "", true,
|
||||
codes, arguments, "Field '" + fixedField + "' is required");
|
||||
bindingResult.addError(error);
|
||||
bindingResult.addError(new BindingFieldError(
|
||||
bindingResult.getObjectName(), fixedField, "", codes, arguments));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -75,10 +78,8 @@ public class DefaultBindingErrorProcessor implements BindingErrorProcessor {
|
||||
if (ObjectUtils.isArray(rejectedValue)) {
|
||||
rejectedValue = StringUtils.arrayToCommaDelimitedString(ObjectUtils.toObjectArray(rejectedValue));
|
||||
}
|
||||
FieldError error = new FieldError(bindingResult.getObjectName(), field, rejectedValue, true,
|
||||
codes, arguments, ex.getLocalizedMessage());
|
||||
error.wrap(ex);
|
||||
bindingResult.addError(error);
|
||||
bindingResult.addError(new BindingFieldError(
|
||||
bindingResult.getObjectName(), field, rejectedValue, codes, arguments, ex));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -97,4 +98,31 @@ public class DefaultBindingErrorProcessor implements BindingErrorProcessor {
|
||||
return new Object[] {new DefaultMessageSourceResolvable(codes, field)};
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Subclass of {@code FieldError} with Spring-style default message rendering.
|
||||
*/
|
||||
@SuppressWarnings("serial")
|
||||
private static class BindingFieldError extends FieldError implements Serializable {
|
||||
|
||||
public BindingFieldError(String objectName, String field, @Nullable Object rejectedValue, String[] codes,
|
||||
Object[] arguments) {
|
||||
|
||||
super(objectName, field, rejectedValue, true, codes, arguments,
|
||||
"Field '" + field + "' is required");
|
||||
}
|
||||
|
||||
public BindingFieldError(String objectName, String field, @Nullable Object rejectedValue, String[] codes,
|
||||
Object[] arguments, PropertyAccessException ex) {
|
||||
|
||||
super(objectName, field, rejectedValue, true, codes, arguments, ex.getLocalizedMessage());
|
||||
wrap(ex);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldRenderDefaultMessage() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user