Skip to content

Commit 404c4d9

Browse files
committed
Support @Valid on container elements for handler arguments
Prior to this commit, #31870 added support for constraint annotations on container elements for handler method argument validation. Supporting this use case: ``` public void addNames(List<@notempty String> names) ``` This commit does the same for `@Valid` annotation: ``` public void addPeople(List<@Valid Person> people) ``` Fixes gh-32964
1 parent 7785f94 commit 404c4d9

File tree

2 files changed

+12
-3
lines changed

2 files changed

+12
-3
lines changed

Diff for: spring-web/src/main/java/org/springframework/web/method/HandlerMethod.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -417,7 +417,7 @@ public static boolean checkArguments(Class<?> beanType, MethodParameter[] parame
417417
return true;
418418
}
419419
merged = MergedAnnotations.from(getContainerElementAnnotations(param));
420-
if (merged.stream().anyMatch(CONSTRAINT_PREDICATE)) {
420+
if (merged.stream().anyMatch(CONSTRAINT_PREDICATE.or(VALID_PREDICATE))) {
421421
return true;
422422
}
423423
}

Diff for: spring-web/src/test/java/org/springframework/web/method/HandlerMethodTests.java

+11-2
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,14 @@ class HandlerMethodTests {
4040
@Test
4141
void shouldValidateArgsWithConstraintsDirectlyOnClass() {
4242
Object target = new MyClass();
43-
testValidateArgs(target, List.of("addIntValue", "addPersonAndIntValue", "addPersons", "addNames"), true);
43+
testValidateArgs(target, List.of("addIntValue", "addPersonAndIntValue", "addPersons", "addPeople", "addNames"), true);
4444
testValidateArgs(target, List.of("addPerson", "getPerson", "getIntValue", "addPersonNotValidated"), false);
4545
}
4646

4747
@Test
4848
void shouldValidateArgsWithConstraintsOnInterface() {
4949
Object target = new MyInterfaceImpl();
50-
testValidateArgs(target, List.of("addIntValue", "addPersonAndIntValue", "addPersons"), true);
50+
testValidateArgs(target, List.of("addIntValue", "addPersonAndIntValue", "addPersons", "addPeople"), true);
5151
testValidateArgs(target, List.of("addPerson", "addPersonNotValidated", "getPerson", "getIntValue"), false);
5252
}
5353

@@ -115,6 +115,9 @@ public void addPersonAndIntValue(@Valid Person person, @Max(10) int value) {
115115
public void addPersons(@Valid List<Person> persons) {
116116
}
117117

118+
public void addPeople(List<@Valid Person> persons) {
119+
}
120+
118121
public void addNames(List<@NotEmpty String> names) {
119122
}
120123

@@ -144,6 +147,8 @@ private interface MyInterface {
144147

145148
void addPersons(@Valid List<Person> persons);
146149

150+
void addPeople(List<@Valid Person> persons);
151+
147152
void addPersonNotValidated(Person person);
148153

149154
@Valid
@@ -173,6 +178,10 @@ public void addPersonAndIntValue(Person person, int value) {
173178
public void addPersons(List<Person> persons) {
174179
}
175180

181+
@Override
182+
public void addPeople(List<@Valid Person> persons) {
183+
}
184+
176185
@Override
177186
public void addPersonNotValidated(Person person) {
178187
}

0 commit comments

Comments
 (0)