3737
3838import  java .io .UnsupportedEncodingException ;
3939import  java .lang .annotation .Annotation ;
40+ import  java .lang .reflect .Array ;
4041import  java .lang .reflect .InvocationTargetException ;
4142import  java .lang .reflect .Method ;
4243import  java .lang .reflect .Modifier ;
4344import  java .net .URI ;
4445import  java .net .URISyntaxException ;
4546import  java .net .URLDecoder ;
4647import  java .nio .charset .StandardCharsets ;
48+ import  java .sql .Ref ;
49+ import  java .util .ArrayList ;
4750import  java .util .HashMap ;
51+ import  java .util .List ;
4852import  java .util .Map ;
4953import  java .util .Set ;
5054import  java .util .concurrent .ConcurrentHashMap ;
@@ -168,7 +172,7 @@ protected void channelRead0(ChannelHandlerContext ctx, FullHttpRequest msg) thro
168172            return ;
169173        }
170174        try  {
171-             Map <String , String > params  = loadParam (pair .getLeft ());
175+             Map <String , Object > params  = loadParam (pair .getLeft ());
172176
173177            boolean  keepHandle  = handleBefore (ctx , pair .getRight (), msg );
174178            if  (!keepHandle ) {
@@ -206,21 +210,21 @@ protected void channelRead0(ChannelHandlerContext ctx, FullHttpRequest msg) thro
206210                        } else  if  (anno .annotationType () == RequestParam .class ) {
207211                            RequestParam  rp  = (RequestParam ) anno ;
208212                            String  key  = "" .equals (rp .value ()) ? method .getParameters ()[i ].getName () : rp .value ();
209-                             String  value  = params .get (key );
210-                             if  (parameterType .isAssignableFrom (String .class )) {
211-                                 parameter [i ] = value ;
212-                             } else  if  (parameterType .isAssignableFrom (int .class )) {
213-                                 parameter [i ] = Integer .parseInt (value );
214-                             } else  if  (parameterType .isAssignableFrom (double .class )) {
215-                                 parameter [i ] = Double .parseDouble (value );
216-                             } else  if  (parameterType .isAssignableFrom (boolean .class )) {
217-                                 parameter [i ] = Boolean .parseBoolean (value );
218-                             } else  if  (parameterType .isAssignableFrom (long .class )) {
219-                                 parameter [i ] = Long .parseLong (value );
220-                             } else  if  (parameterType .isAssignableFrom (Enum .class )) {
221-                                 parameter [i ] = Enum .valueOf ((Class <? extends  Enum >) parameterType , value );
213+                             Object  value  = params .get (key );
214+ 
215+                             if  (parameterType .isArray ()) {
216+                                 List <String > valueArr  = (List <String >) params .get (key  + "[]" );
217+                                 Class <?> componentType  = parameterType .getComponentType ();
218+                                 Object  array  = Array .newInstance (componentType , valueArr .size ());
219+                                 for  (int  j  = 0 ; j  < valueArr .size (); j ++) {
220+                                     Array .set (array , j , ReflexUtil .parseValueFromStr (componentType , valueArr .get (j )));
221+                                 }
222+                                 parameter [i ] = array ;
222223                            } else  {
223-                                 parameter [i ] = new  Gson ().fromJson (value , parameterType );
224+                                 parameter [i ] = ReflexUtil .parseValueFromStr (parameterType , (String ) value );
225+                                 if  (parameter [i ] == null ) {
226+                                     parameter [i ] = new  Gson ().fromJson (value .toString (), parameterType );
227+                                 }
224228                            }
225229                        }
226230                    }
@@ -267,9 +271,10 @@ protected void channelRead0(ChannelHandlerContext ctx, FullHttpRequest msg) thro
267271        }
268272    }
269273
270-     private  Map <String , String > loadParam (URI  uri ) throws  UnsupportedEncodingException  {
274+     @ SuppressWarnings ("unchecked" )
275+     private  Map <String , Object > loadParam (URI  uri ) throws  UnsupportedEncodingException  {
271276        String  query  = uri .getQuery ();
272-         Map <String , String > params  = new  HashMap <>();
277+         Map <String , Object > params  = new  HashMap <>();
273278        if  (query  == null ) {
274279            return  params ;
275280        }
@@ -279,10 +284,16 @@ private Map<String, String> loadParam(URI uri) throws UnsupportedEncodingExcepti
279284                continue ;
280285            }
281286            String [] kv  = str .split ("=" );
282-             if  (kv .length  > 1 ) {
283-                 params .put (kv [0 ], URLDecoder .decode (kv [1 ], "UTF-8" ));
287+             if  (kv .length  <= 1 ) {
288+                 continue ;
289+             }
290+             String  key  = kv [0 ];
291+             String  value  = URLDecoder .decode (kv [1 ], "UTF-8" );
292+             if  (key .endsWith ("[]" )) {
293+                 List <String > array  = (List <String >) params .computeIfAbsent (key , o  -> new  ArrayList <>());
294+                 array .add (value );
284295            } else  {
285-                 params .put (kv [ 0 ],  "" );
296+                 params .put (key ,  value );
286297            }
287298        }
288299        return  params ;
0 commit comments