public boolean supports(ParamMetaData metaData) { boolean result = metaData.getParamType() == Mvc.class; if (result) { if (!metaData.getControllerClass().getName().startsWith("com.sinosoft.one.mvc")) { throw new IllegalStateException("Mvc is not allowed as a method parameter:" + metaData); } } return result; }
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; }