diff --git a/spring-context/src/main/java/org/springframework/validation/method/MethodValidationResult.java b/spring-context/src/main/java/org/springframework/validation/method/MethodValidationResult.java index d53075bafe3c..8ae36238f71d 100644 --- a/spring-context/src/main/java/org/springframework/validation/method/MethodValidationResult.java +++ b/spring-context/src/main/java/org/springframework/validation/method/MethodValidationResult.java @@ -19,6 +19,7 @@ import java.lang.reflect.Method; import java.util.Collections; import java.util.List; +import java.util.stream.Stream; import org.springframework.context.MessageSourceResolvable; import org.springframework.validation.Errors; @@ -56,17 +57,22 @@ public interface MethodValidationResult { * Whether the result contains any validation errors. */ default boolean hasErrors() { - return !getParameterValidationResults().isEmpty(); + return !getParameterValidationResults().isEmpty() || + !getCrossParameterValidationResults().isEmpty(); } /** - * Return a single list with all errors from all validation results. + * Return a single list with all errors from all validation results, + * including cross-parameter validation errors. * @see #getParameterValidationResults() + * @see #getCrossParameterValidationResults() * @see ParameterValidationResult#getResolvableErrors() */ default List getAllErrors() { - return getParameterValidationResults().stream() - .flatMap(result -> result.getResolvableErrors().stream()) + return Stream.concat( + getParameterValidationResults().stream() + .flatMap(result -> result.getResolvableErrors().stream()), + getCrossParameterValidationResults().stream()) .toList(); }