Enhancement in HandlerMethodValidationException

Add dedicated method to Visitor for constraints directly on a
RequestBody method parameter (rather than nested).

Closes gh-34549
This commit is contained in:
rstoyanchev
2025-03-06 11:03:22 +00:00
parent 09ae080b99
commit 9ab43b138a
2 changed files with 32 additions and 6 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2024 the original author or authors.
* Copyright 2002-2025 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.
@@ -146,7 +146,12 @@ public class HandlerMethodValidationException extends ResponseStatusException im
}
RequestBody requestBody = param.getParameterAnnotation(RequestBody.class);
if (requestBody != null) {
visitor.requestBody(requestBody, asErrors(result));
if (result instanceof ParameterErrors errors) {
visitor.requestBody(requestBody, errors);
}
else {
visitor.requestBodyValidationResult(requestBody, result);
}
continue;
}
RequestHeader requestHeader = param.getParameterAnnotation(RequestHeader.class);
@@ -216,6 +221,20 @@ public class HandlerMethodValidationException extends ResponseStatusException im
*/
void requestBody(RequestBody requestBody, ParameterErrors errors);
/**
* An additional {@code @RequestBody} callback for validation failures
* for constraints on the method parameter. For example:
* <pre>
* &#064;RequestBody List<&#064;NotEmpty String> ids
* </pre>
* Handle results for {@code @RequestBody} method parameters.
* @param requestBody the annotation declared on the parameter
* @param result the validation result
* @since 7.0
*/
default void requestBodyValidationResult(RequestBody requestBody, ParameterValidationResult result) {
}
/**
* Handle results for {@code @RequestHeader} method parameters.
* @param requestHeader the annotation declared on the parameter