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); }