@@ -84,6 +84,8 @@ public class RequestParamMethodArgumentResolverTests {
8484	private  MethodParameter  paramRequired ;
8585	private  MethodParameter  paramNotRequired ;
8686	private  MethodParameter  paramOptional ;
87+ 	private  MethodParameter  paramOptionalArray ;
88+ 	private  MethodParameter  paramOptionalList ;
8789	private  MethodParameter  multipartFileOptional ;
8890
8991	private  NativeWebRequest  webRequest ;
@@ -119,7 +121,9 @@ public void setUp() throws Exception {
119121		paramRequired  = new  SynthesizingMethodParameter (method , 15 );
120122		paramNotRequired  = new  SynthesizingMethodParameter (method , 16 );
121123		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 );
123127
124128		request  = new  MockHttpServletRequest ();
125129		webRequest  = new  ServletWebRequest (request , new  MockHttpServletResponse ());
@@ -437,6 +441,83 @@ public void resolveOptionalParamValue() throws Exception {
437441		assertEquals (123 , ((Optional ) result ).get ());
438442	}
439443
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+ 
440521	@ Test 
441522	public  void  resolveOptionalMultipartFile () throws  Exception  {
442523		ConfigurableWebBindingInitializer  initializer  = new  ConfigurableWebBindingInitializer ();
@@ -493,6 +574,8 @@ public void handle(
493574			@ RequestParam ("name" ) String  paramRequired ,
494575			@ RequestParam (name  = "name" , required  = false ) String  paramNotRequired ,
495576			@ RequestParam ("name" ) Optional <Integer > paramOptional ,
577+ 			@ RequestParam ("name" ) Optional <Integer []> paramOptionalArray ,
578+ 			@ RequestParam ("name" ) Optional <List > paramOptionalList ,
496579			@ RequestParam ("mfile" ) Optional <MultipartFile > multipartFileOptional ) {
497580	}
498581
0 commit comments