17
17
package org .springframework .validation .beanvalidation ;
18
18
19
19
import java .lang .reflect .Method ;
20
+ import java .util .Collection ;
20
21
import java .util .List ;
21
22
import java .util .Locale ;
23
+ import java .util .Set ;
22
24
import java .util .function .Consumer ;
23
25
24
26
import jakarta .validation .Valid ;
25
27
import jakarta .validation .constraints .Max ;
26
28
import jakarta .validation .constraints .Min ;
29
+ import jakarta .validation .constraints .NotBlank ;
27
30
import jakarta .validation .constraints .Size ;
28
31
import org .junit .jupiter .api .AfterEach ;
29
32
import org .junit .jupiter .api .BeforeEach ;
47
50
*/
48
51
public class MethodValidationAdapterTests {
49
52
50
- private static final Person faustino1234 = new Person ("Faustino1234" );
53
+ private static final Person faustino1234 = new Person ("Faustino1234" , List . of ( "Working on Spring" ) );
51
54
52
- private static final Person cayetana6789 = new Person ("Cayetana6789" );
55
+ private static final Person cayetana6789 = new Person ("Cayetana6789" , List . of ( " " ) );
53
56
54
57
55
58
private final MethodValidationAdapter validationAdapter = new MethodValidationAdapter ();
@@ -88,7 +91,13 @@ void validateArguments() {
88
91
codes [Size.guardian.name,Size.name,Size.java.lang.String,Size]; \
89
92
arguments [org.springframework.context.support.DefaultMessageSourceResolvable: \
90
93
codes [guardian.name,name]; arguments []; default message [name],10,1]; \
91
- default message [size must be between 1 and 10]""" ));
94
+ default message [size must be between 1 and 10]""" , """
95
+ Field error in object 'guardian' on field 'hobbies[0]': rejected value [ ]; \
96
+ codes [NotBlank.guardian.hobbies[0],NotBlank.guardian.hobbies,NotBlank.hobbies[0],\
97
+ NotBlank.hobbies,NotBlank.java.lang.String,NotBlank]; arguments \
98
+ [org.springframework.context.support.DefaultMessageSourceResolvable: codes \
99
+ [guardian.hobbies[0],hobbies[0]]; arguments []; default message [hobbies[0]]]; \
100
+ default message [must not be blank]""" ));
92
101
93
102
assertValueResult (ex .getValueResults ().get (0 ), 2 , 3 , List .of ("""
94
103
org.springframework.context.support.DefaultMessageSourceResolvable: \
@@ -106,7 +115,7 @@ void validateArgumentWithCustomObjectName() {
106
115
107
116
this .validationAdapter .setObjectNameResolver ((param , value ) -> "studentToAdd" );
108
117
109
- testArgs (target , method , new Object [] {faustino1234 , new Person ("Joe" ), 1 }, ex -> {
118
+ testArgs (target , method , new Object [] {faustino1234 , new Person ("Joe" , List . of () ), 1 }, ex -> {
110
119
111
120
assertThat (ex .getAllValidationResults ()).hasSize (1 );
112
121
@@ -178,7 +187,49 @@ void validateListArgument() {
178
187
codes [Size.people.name,Size.name,Size.java.lang.String,Size]; \
179
188
arguments [org.springframework.context.support.DefaultMessageSourceResolvable: \
180
189
codes [people.name,name]; arguments []; default message [name],10,1]; \
181
- default message [size must be between 1 and 10]""" ));
190
+ default message [size must be between 1 and 10]""" , """
191
+ Field error in object 'people' on field 'hobbies[0]': rejected value [ ]; \
192
+ codes [NotBlank.people.hobbies[0],NotBlank.people.hobbies,NotBlank.hobbies[0],\
193
+ NotBlank.hobbies,NotBlank.java.lang.String,NotBlank]; arguments \
194
+ [org.springframework.context.support.DefaultMessageSourceResolvable: codes \
195
+ [people.hobbies[0],hobbies[0]]; arguments []; default message [hobbies[0]]]; \
196
+ default message [must not be blank]""" ));
197
+ });
198
+ }
199
+
200
+ @ Test
201
+ void validateSetArgument () {
202
+ MyService target = new MyService ();
203
+ Method method = getMethod (target , "addPeople" );
204
+
205
+ testArgs (target , method , new Object [] {Set .of (faustino1234 , cayetana6789 )}, ex -> {
206
+
207
+ assertThat (ex .getAllValidationResults ()).hasSize (2 );
208
+
209
+ int paramIndex = 0 ;
210
+ String objectName = "people" ;
211
+ List <ParameterErrors > results = ex .getBeanResults ();
212
+
213
+ assertThat (results ).satisfiesExactlyInAnyOrder (
214
+ result -> assertBeanResult (result , paramIndex , objectName , faustino1234 , List .of ("""
215
+ Field error in object 'people' on field 'name': rejected value [Faustino1234]; \
216
+ codes [Size.people.name,Size.name,Size.java.lang.String,Size]; \
217
+ arguments [org.springframework.context.support.DefaultMessageSourceResolvable: \
218
+ codes [people.name,name]; arguments []; default message [name],10,1]; \
219
+ default message [size must be between 1 and 10]""" )),
220
+ result -> assertBeanResult (result , paramIndex , objectName , cayetana6789 , List .of ("""
221
+ Field error in object 'people' on field 'name': rejected value [Cayetana6789]; \
222
+ codes [Size.people.name,Size.name,Size.java.lang.String,Size]; \
223
+ arguments [org.springframework.context.support.DefaultMessageSourceResolvable: \
224
+ codes [people.name,name]; arguments []; default message [name],10,1]; \
225
+ default message [size must be between 1 and 10]""" , """
226
+ Field error in object 'people' on field 'hobbies[0]': rejected value [ ]; \
227
+ codes [NotBlank.people.hobbies[0],NotBlank.people.hobbies,NotBlank.hobbies[0],\
228
+ NotBlank.hobbies,NotBlank.java.lang.String,NotBlank]; arguments \
229
+ [org.springframework.context.support.DefaultMessageSourceResolvable: codes \
230
+ [people.hobbies[0],hobbies[0]]; arguments []; default message [hobbies[0]]]; \
231
+ default message [must not be blank]""" ))
232
+ );
182
233
});
183
234
}
184
235
@@ -191,7 +242,7 @@ private void testReturnValue(Object target, Method method, @Nullable Object valu
191
242
}
192
243
193
244
private static void assertBeanResult (
194
- ParameterErrors errors , int parameterIndex , String objectName , Object argument ,
245
+ ParameterErrors errors , int parameterIndex , String objectName , @ Nullable Object argument ,
195
246
List <String > fieldErrors ) {
196
247
197
248
assertThat (errors .getMethodParameter ().getParameterIndex ()).isEqualTo (parameterIndex );
@@ -234,14 +285,14 @@ public Person getPerson() {
234
285
throw new UnsupportedOperationException ();
235
286
}
236
287
237
- public void addPeople (@ Valid List <Person > people ) {
288
+ public void addPeople (@ Valid Collection <Person > people ) {
238
289
}
239
290
240
291
}
241
292
242
293
243
294
@ SuppressWarnings ("unused" )
244
- private record Person (@ Size (min = 1 , max = 10 ) String name ) {
295
+ private record Person (@ Size (min = 1 , max = 10 ) String name , List < @ NotBlank String > hobbies ) {
245
296
}
246
297
247
298
}
0 commit comments