Provide access to underlying ConstraintViolation

Closes gh-33025
This commit is contained in:
rstoyanchev
2024-07-12 14:43:12 +01:00
parent 3e48498663
commit bd31e8dacc
7 changed files with 87 additions and 15 deletions

View File

@@ -22,6 +22,7 @@ import java.util.Locale;
import java.util.Set;
import java.util.function.Consumer;
import jakarta.validation.ConstraintViolation;
import jakarta.validation.Valid;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
@@ -99,7 +100,7 @@ class MethodValidationAdapterTests {
default message [must not be blank]"""));
assertValueResult(ex.getValueResults().get(0), 2, 3, List.of("""
org.springframework.context.support.DefaultMessageSourceResolvable: \
org.springframework.validation.beanvalidation.MethodValidationAdapter$ViolationMessageSourceResolvable: \
codes [Max.myService#addStudent.degrees,Max.degrees,Max.int,Max]; \
arguments [org.springframework.context.support.DefaultMessageSourceResolvable: \
codes [myService#addStudent.degrees,degrees]; arguments []; default message [degrees],2]; \
@@ -136,7 +137,7 @@ class MethodValidationAdapterTests {
assertThat(ex.getAllValidationResults()).hasSize(1);
assertValueResult(ex.getValueResults().get(0), -1, 4, List.of("""
org.springframework.context.support.DefaultMessageSourceResolvable: \
org.springframework.validation.beanvalidation.MethodValidationAdapter$ViolationMessageSourceResolvable: \
codes [Min.myService#getIntValue,Min,Min.int]; \
arguments [org.springframework.context.support.DefaultMessageSourceResolvable: \
codes [myService#getIntValue]; arguments []; default message [],5]; \
@@ -204,7 +205,7 @@ class MethodValidationAdapterTests {
testArgs(target, method, new Object[] {List.of(" ")}, ex -> {
assertThat(ex.getAllValidationResults()).hasSize(1);
assertValueResult(ex.getValueResults().get(0), 0, " ", List.of("""
org.springframework.context.support.DefaultMessageSourceResolvable: \
org.springframework.validation.beanvalidation.MethodValidationAdapter$ViolationMessageSourceResolvable: \
codes [NotBlank.myService#addHobbies.hobbies,NotBlank.hobbies,NotBlank.java.util.List,NotBlank]; \
arguments [org.springframework.context.support.DefaultMessageSourceResolvable: \
codes [myService#addHobbies.hobbies,hobbies]; \
@@ -220,7 +221,7 @@ class MethodValidationAdapterTests {
testArgs(target, method, new Object[] {Set.of("test", " ")}, ex -> {
assertThat(ex.getAllValidationResults()).hasSize(1);
assertValueResult(ex.getValueResults().get(0), 0, Set.of("test", " "), List.of("""
org.springframework.context.support.DefaultMessageSourceResolvable: \
org.springframework.validation.beanvalidation.MethodValidationAdapter$ViolationMessageSourceResolvable: \
codes [NotBlank.myService#addUniqueHobbies.hobbies,NotBlank.hobbies,NotBlank.java.util.Set,NotBlank]; \
arguments [org.springframework.context.support.DefaultMessageSourceResolvable: \
codes [myService#addUniqueHobbies.hobbies,hobbies]; \
@@ -254,9 +255,14 @@ class MethodValidationAdapterTests {
assertThat(result.getMethodParameter().getParameterIndex()).isEqualTo(parameterIndex);
assertThat(result.getArgument()).isEqualTo(argument);
assertThat(result.getResolvableErrors())
List<MessageSourceResolvable> resolvableErrors = result.getResolvableErrors();
assertThat(resolvableErrors)
.extracting(MessageSourceResolvable::toString)
.containsExactlyInAnyOrderElementsOf(errors);
resolvableErrors.forEach(error ->
assertThat(result.unwrap(error, ConstraintViolation.class)).isNotNull());
}
private static Method getMethod(Object target, String methodName) {