private static boolean addIndexAliasParamNameIfNeccessary(ParamMetaData metaData) {
   Class<?>[] paramTypes = metaData.getMethod().getParameterTypes();
   int index = metaData.getIndex(); // index是从0开始的
   int uriParamIndex = 0; // uriParamIndex,有效的值是从**1**开始的
   int breakIndex = 0; // breakIndex从0开始的
   for (; breakIndex < paramTypes.length && breakIndex <= index; breakIndex++) {
     Class<?> type = paramTypes[breakIndex];
     if (type.isArray()) {
       type = type.getComponentType();
     } else if (Collection.class.isAssignableFrom(type)) {
       Class<?>[] generics = compileGenericParameterTypesDetail(metaData.getMethod(), breakIndex);
       if (generics == null) {
         return false;
       }
       Assert.isTrue(generics.length > 0);
       type = generics[0];
     }
     if (ClassUtils.isPrimitiveOrWrapper(type)
         || type == String.class
         || Date.class.isAssignableFrom(type)) {
       uriParamIndex++;
     }
   }
   if ((breakIndex - 1) == index && uriParamIndex > 0) {
     String alias = "$" + uriParamIndex;
     metaData.addAliasParamName(alias);
     if (logger.isDebugEnabled()) {
       logger.debug(
           "add index alias paramName: '"
               + alias
               + "' for "
               + metaData.getControllerClass().getName()
               + "."
               + metaData.getMethod().getName()
               + "(..."
               + metaData.getParamType()
               + "[index="
               + breakIndex
               + "] ...)");
     }
     return true;
   }
   return false;
 }
 public final boolean supports(ParamMetaData metaData) {
   if (innerSupports(metaData)) {
     Class<?>[] generics =
         compileGenericParameterTypesDetail(metaData.getMethod(), metaData.getIndex());
     if (generics == null || generics.length == 0) {
       throw new IllegalArgumentException(
           "please use generic for "
               + metaData.getParamType().getName()
               + " ["
               + metaData.getControllerClass().getName()
               + "."
               + metaData.getMethod().getName()
               + "]");
     }
     metaData.setUserObject(this, generics[0]);
     return true;
   }
   return false;
 }
 public boolean supports(ParamMetaData metaData) {
   boolean supports =
       Map.class == metaData.getParamType() || HashMap.class == metaData.getParamType();
   if (supports) {
     Class<?>[] generics =
         compileGenericParameterTypesDetail(metaData.getMethod(), metaData.getIndex());
     if (generics == null || generics.length == 0) {
       throw new IllegalArgumentException(
           "please use generic for "
               + metaData.getParamType().getName()
               + " ["
               + metaData.getControllerClass().getName()
               + "."
               + metaData.getMethod().getName()
               + "]");
     }
     metaData.setUserObject(this, generics);
   }
   return supports;
 }
 protected Date resolveUtilDate(String text, ParamMetaData metaData) throws ParseException {
   if (StringUtils.isEmpty(text)) {
     DefValue defaultValudeAnnotation = metaData.getAnnotation(DefValue.class);
     if (defaultValudeAnnotation != null
         && !DefValue.NATIVE_DEFAULT.equals(defaultValudeAnnotation.value())) {
       if (StringUtils.isEmpty(defaultValudeAnnotation.value())) {
         return new Date(); // 当前时间!
       } else {
         text = defaultValudeAnnotation.value(); // 改变要被解析的文本!
       }
     } else {
       return null; // 保留null,而非当前时间
     }
   }
   Annotation[] paramAnnotations =
       metaData.getMethod().getParameterAnnotations()[metaData.getIndex()];
   for (Annotation annotation : paramAnnotations) {
     if (annotation instanceof Pattern) {
       String[] patterns = Pattern.class.cast(annotation).value();
       for (String pattern : patterns) {
         // 以long为时间
         if ("long".equals(pattern)) {
           boolean digit = true;
           for (int i = 0; i < text.length(); i++) {
             if (!Character.isDigit(text.charAt(i))) {
               digit = false;
               break;
             }
           }
           if (digit) {
             return new Date(Long.parseLong(text));
           }
         }
         // 可以配置多个pattern!! 通过长度匹配
         if (text.length() == pattern.length()) {
           return new SimpleDateFormat(pattern).parse(text);
         }
       }
       break;
     }
   }
   return DatePatterns.parse(text);
 }