@@ -84,6 +84,8 @@ public class RequestParamMethodArgumentResolverTests {
84
84
private MethodParameter paramRequired ;
85
85
private MethodParameter paramNotRequired ;
86
86
private MethodParameter paramOptional ;
87
+ private MethodParameter paramOptionalArray ;
88
+ private MethodParameter paramOptionalList ;
87
89
private MethodParameter multipartFileOptional ;
88
90
89
91
private NativeWebRequest webRequest ;
@@ -119,7 +121,9 @@ public void setUp() throws Exception {
119
121
paramRequired = new SynthesizingMethodParameter (method , 15 );
120
122
paramNotRequired = new SynthesizingMethodParameter (method , 16 );
121
123
paramOptional = new SynthesizingMethodParameter (method , 17 );
122
- multipartFileOptional = new SynthesizingMethodParameter (method , 18 );
124
+ paramOptionalArray = new SynthesizingMethodParameter (method , 18 );
125
+ paramOptionalList = new SynthesizingMethodParameter (method , 19 );
126
+ multipartFileOptional = new SynthesizingMethodParameter (method , 20 );
123
127
124
128
request = new MockHttpServletRequest ();
125
129
webRequest = new ServletWebRequest (request , new MockHttpServletResponse ());
@@ -437,6 +441,83 @@ public void resolveOptionalParamValue() throws Exception {
437
441
assertEquals (123 , ((Optional ) result ).get ());
438
442
}
439
443
444
+ @ Test
445
+ @ SuppressWarnings ("rawtypes" )
446
+ public void missingOptionalParamValue () throws Exception {
447
+ ConfigurableWebBindingInitializer initializer = new ConfigurableWebBindingInitializer ();
448
+ initializer .setConversionService (new DefaultConversionService ());
449
+ WebDataBinderFactory binderFactory = new DefaultDataBinderFactory (initializer );
450
+
451
+ Object result = resolver .resolveArgument (paramOptional , null , webRequest , binderFactory );
452
+ assertEquals (Optional .empty (), result );
453
+
454
+ result = resolver .resolveArgument (paramOptional , null , webRequest , binderFactory );
455
+ assertEquals (Optional .class , result .getClass ());
456
+ assertFalse (((Optional ) result ).isPresent ());
457
+ }
458
+
459
+ @ Test
460
+ @ SuppressWarnings ("rawtypes" )
461
+ public void resolveOptionalParamArray () throws Exception {
462
+ ConfigurableWebBindingInitializer initializer = new ConfigurableWebBindingInitializer ();
463
+ initializer .setConversionService (new DefaultConversionService ());
464
+ WebDataBinderFactory binderFactory = new DefaultDataBinderFactory (initializer );
465
+
466
+ Object result = resolver .resolveArgument (paramOptionalArray , null , webRequest , binderFactory );
467
+ assertEquals (Optional .empty (), result );
468
+
469
+ this .request .addParameter ("name" , "123" , "456" );
470
+ result = resolver .resolveArgument (paramOptionalArray , null , webRequest , binderFactory );
471
+ assertEquals (Optional .class , result .getClass ());
472
+ assertArrayEquals (new Integer [] {123 , 456 }, (Integer []) ((Optional ) result ).get ());
473
+ }
474
+
475
+ @ Test
476
+ @ SuppressWarnings ("rawtypes" )
477
+ public void missingOptionalParamArray () throws Exception {
478
+ ConfigurableWebBindingInitializer initializer = new ConfigurableWebBindingInitializer ();
479
+ initializer .setConversionService (new DefaultConversionService ());
480
+ WebDataBinderFactory binderFactory = new DefaultDataBinderFactory (initializer );
481
+
482
+ Object result = resolver .resolveArgument (paramOptionalArray , null , webRequest , binderFactory );
483
+ assertEquals (Optional .empty (), result );
484
+
485
+ result = resolver .resolveArgument (paramOptionalArray , null , webRequest , binderFactory );
486
+ assertEquals (Optional .class , result .getClass ());
487
+ assertFalse (((Optional ) result ).isPresent ());
488
+ }
489
+
490
+ @ Test
491
+ @ SuppressWarnings ("rawtypes" )
492
+ public void resolveOptionalParamList () throws Exception {
493
+ ConfigurableWebBindingInitializer initializer = new ConfigurableWebBindingInitializer ();
494
+ initializer .setConversionService (new DefaultConversionService ());
495
+ WebDataBinderFactory binderFactory = new DefaultDataBinderFactory (initializer );
496
+
497
+ Object result = resolver .resolveArgument (paramOptionalList , null , webRequest , binderFactory );
498
+ assertEquals (Optional .empty (), result );
499
+
500
+ this .request .addParameter ("name" , "123" , "456" );
501
+ result = resolver .resolveArgument (paramOptionalList , null , webRequest , binderFactory );
502
+ assertEquals (Optional .class , result .getClass ());
503
+ assertEquals (Arrays .asList ("123" , "456" ), ((Optional ) result ).get ());
504
+ }
505
+
506
+ @ Test
507
+ @ SuppressWarnings ("rawtypes" )
508
+ public void missingOptionalParamList () throws Exception {
509
+ ConfigurableWebBindingInitializer initializer = new ConfigurableWebBindingInitializer ();
510
+ initializer .setConversionService (new DefaultConversionService ());
511
+ WebDataBinderFactory binderFactory = new DefaultDataBinderFactory (initializer );
512
+
513
+ Object result = resolver .resolveArgument (paramOptionalList , null , webRequest , binderFactory );
514
+ assertEquals (Optional .empty (), result );
515
+
516
+ result = resolver .resolveArgument (paramOptionalList , null , webRequest , binderFactory );
517
+ assertEquals (Optional .class , result .getClass ());
518
+ assertFalse (((Optional ) result ).isPresent ());
519
+ }
520
+
440
521
@ Test
441
522
public void resolveOptionalMultipartFile () throws Exception {
442
523
ConfigurableWebBindingInitializer initializer = new ConfigurableWebBindingInitializer ();
@@ -493,6 +574,8 @@ public void handle(
493
574
@ RequestParam ("name" ) String paramRequired ,
494
575
@ RequestParam (name = "name" , required = false ) String paramNotRequired ,
495
576
@ RequestParam ("name" ) Optional <Integer > paramOptional ,
577
+ @ RequestParam ("name" ) Optional <Integer []> paramOptionalArray ,
578
+ @ RequestParam ("name" ) Optional <List > paramOptionalList ,
496
579
@ RequestParam ("mfile" ) Optional <MultipartFile > multipartFileOptional ) {
497
580
}
498
581
0 commit comments