Skip to content

Commit cb04c3b

Browse files
committed
Expose isReturnValue from MethodValidationException
See gh-29825
1 parent 5c5d8e6 commit cb04c3b

File tree

2 files changed

+29
-5
lines changed

2 files changed

+29
-5
lines changed

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

+10-4
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,8 @@ public MethodValidationResult validateMethodArguments(
230230
Method bridgedMethod = BridgeMethodResolver.findBridgedMethod(mostSpecificMethod);
231231
result = execVal.validateParameters(target, bridgedMethod, arguments, groups);
232232
}
233-
return (result.isEmpty() ? EMPTY_RESULT : createException(target, method, result, i -> arguments[i]));
233+
return (result.isEmpty() ? EMPTY_RESULT :
234+
createException(target, method, result, i -> arguments[i], false));
234235
}
235236

236237
/**
@@ -249,12 +250,12 @@ public MethodValidationResult validateMethodReturnValue(
249250

250251
ExecutableValidator execVal = this.validator.get().forExecutables();
251252
Set<ConstraintViolation<Object>> result = execVal.validateReturnValue(target, method, returnValue, groups);
252-
return (result.isEmpty() ? EMPTY_RESULT : createException(target, method, result, i -> returnValue));
253+
return (result.isEmpty() ? EMPTY_RESULT : createException(target, method, result, i -> returnValue, true));
253254
}
254255

255256
private MethodValidationException createException(
256257
Object target, Method method, Set<ConstraintViolation<Object>> violations,
257-
Function<Integer, Object> argumentFunction) {
258+
Function<Integer, Object> argumentFunction, boolean forReturnValue) {
258259

259260
Map<MethodParameter, ValueResultBuilder> parameterViolations = new LinkedHashMap<>();
260261
Map<Path.Node, BeanResultBuilder> cascadedViolations = new LinkedHashMap<>();
@@ -296,7 +297,7 @@ else if (node.getKind().equals(ElementKind.RETURN_VALUE)) {
296297
cascadedViolations.forEach((node, builder) -> validatonResultList.add(builder.build()));
297298
validatonResultList.sort(RESULT_COMPARATOR);
298299

299-
return new MethodValidationException(target, method, violations, validatonResultList);
300+
return new MethodValidationException(target, method, violations, validatonResultList, forReturnValue);
300301
}
301302

302303
/**
@@ -549,6 +550,11 @@ public List<ParameterErrors> getBeanResults() {
549550
public void throwIfViolationsPresent() {
550551
}
551552

553+
@Override
554+
public String toString() {
555+
return "MethodValidationResult (0 violations)";
556+
}
557+
552558
}
553559

554560
}

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

+19-1
Original file line numberDiff line numberDiff line change
@@ -48,16 +48,19 @@ public class MethodValidationException extends ConstraintViolationException impl
4848

4949
private final List<ParameterValidationResult> allValidationResults;
5050

51+
private final boolean forReturnValue;
52+
5153

5254
public MethodValidationException(
5355
Object target, Method method, Set<? extends ConstraintViolation<?>> violations,
54-
List<ParameterValidationResult> validationResults) {
56+
List<ParameterValidationResult> validationResults, boolean forReturnValue) {
5557

5658
super(violations);
5759
Assert.notEmpty(violations, "'violations' must not be empty");
5860
this.target = target;
5961
this.method = method;
6062
this.allValidationResults = validationResults;
63+
this.forReturnValue = forReturnValue;
6164
}
6265

6366

@@ -75,6 +78,15 @@ public Method getMethod() {
7578
return this.method;
7679
}
7780

81+
/**
82+
* Whether the violations are for a return value.
83+
* If true the violations are from validating a return value.
84+
* If false the violations are from validating method arguments.
85+
*/
86+
public boolean isForReturnValue() {
87+
return this.forReturnValue;
88+
}
89+
7890
// re-declare parent class method for NonNull treatment of interface
7991

8092
@Override
@@ -107,4 +119,10 @@ public void throwIfViolationsPresent() {
107119
throw this;
108120
}
109121

122+
@Override
123+
public String toString() {
124+
return "MethodValidationResult (" + getConstraintViolations().size() + " violations) " +
125+
"for " + this.method.toGenericString();
126+
}
127+
110128
}

0 commit comments

Comments
 (0)