예제 #1
0
 public Map<?, ?> resolve(Invocation inv, ParamMetaData metaData) {
   if (StringUtils.isNotEmpty(metaData.getParamName())) {
     Class<?>[] genericTypes = (Class[]) metaData.getUserObject(this);
     Class<?> keyType = genericTypes[0];
     Class<?> valueType = genericTypes[1];
     Map<?, ?> toConvert =
         WebUtils.getParametersStartingWith(
             inv.getRequest(), metaData.getParamName() + MAP_SEPARATOR);
     if (toConvert != null) {
       if (keyType != String.class || valueType != String.class) {
         Map<Object, Object> ret = new HashMap<Object, Object>();
         for (Map.Entry<?, ?> entry : toConvert.entrySet()) {
           Object key = entry.getKey();
           Object value = entry.getValue();
           TypeConverter typeConverter = SafedTypeConverterFactory.getCurrentConverter();
           if (keyType != String.class) {
             key = typeConverter.convertIfNecessary(key, keyType);
           }
           if (valueType != String.class) {
             value = typeConverter.convertIfNecessary(value, valueType);
           }
           ret.put(key, value);
         }
         return ret;
       }
       return toConvert;
     }
   }
   return new HashMap<Object, Object>(2);
 }
예제 #2
0
 public BindingResult resolve(Invocation inv, ParamMetaData metaData) {
   if (metaData.getParamName() != null) {
     return inv.getBindingResult(metaData.getParamName());
   } else {
     return inv.getParameterBindingResult();
   }
 }
예제 #3
0
 public Object resolve(Invocation inv, ParamMetaData metaData) {
   Object bean = MvcBeanUtils.instantiateClass(metaData.getParamType());
   ServletRequestDataBinder binder;
   if (!metaData.isAnnotationPresent(Param.class)) {
     binder = new ServletRequestDataBinder(bean);
   } else {
     binder = new ServletRequestDataBinder(bean, metaData.getParamName());
   }
   binder.bind(inv.getRequest());
   String bindingResultName =
       BindingResult.MODEL_KEY_PREFIX + metaData.getParamName() + "BindingResult";
   inv.addModel(bindingResultName, binder.getBindingResult());
   return bean;
 }
예제 #4
0
 @SuppressWarnings("unchecked")
 private static Object resolveArray(
     Invocation inv, ParamMetaData metaData, Class<?> compnentType) {
   if (compnentType == MultipartFile.class) {
     String filterName = metaData.getParamName();
     if (filterName == null) {
       filterName = "";
     }
     if (inv.getRequest() instanceof MultipartRequest) {
       List<MultipartFile> files = new LinkedList<MultipartFile>();
       MultipartRequest multipartRequest = (MultipartRequest) inv.getRequest();
       Iterator<String> names = multipartRequest.getFileNames();
       while (names.hasNext()) {
         String name = names.next();
         if (name.startsWith(filterName)) {
           files.add(multipartRequest.getFile(name));
         }
       }
       return files.toArray(new MultipartFile[0]);
     } else {
       if (logger.isDebugEnabled()) {
         logger.debug(
             "cann't "
                 + "set MultipartFile param to method "
                 + ", the request is not a MultipartRequest");
       }
     }
   } else {
     Object toConvert = null;
     for (String paramName : metaData.getParamNames()) {
       if (paramName != null) {
         toConvert = inv.getRequest().getParameterValues(paramName);
         if (toConvert != null) {
           break;
         }
       }
     }
     if (toConvert != null) {
       if (((String[]) toConvert).length == 1) {
         toConvert = ((String[]) toConvert)[0].split(",");
       }
       Class<?> arrayType;
       if (metaData.getParamType().isArray()) {
         arrayType = metaData.getParamType();
       } else {
         arrayType = arrayTypeMap.get(compnentType);
         if (arrayType == null) {
           arrayType = Array.newInstance((Class<?>) compnentType, 0).getClass();
         }
       }
       TypeConverter typeConverter = SafedTypeConverterFactory.getCurrentConverter();
       Object array = typeConverter.convertIfNecessary(toConvert, arrayType);
       return array;
     }
   }
   return Array.newInstance((Class<?>) compnentType, 0);
 }
예제 #5
0
 public MultipartFile resolve(Invocation inv, ParamMetaData metaData) {
   MultipartFile multipartFile = null;
   if (inv.getRequest() instanceof MultipartRequest) {
     MultipartRequest multipartRequest = (MultipartRequest) inv.getRequest();
     String fileName = metaData.getParamName();
     if (StringUtils.isBlank(fileName)) {
       @SuppressWarnings("unchecked")
       Iterator<String> allFileNames = multipartRequest.getFileNames();
       if (allFileNames.hasNext()) {
         fileName = allFileNames.next();
       }
     }
     if (StringUtils.isNotBlank(fileName)) {
       multipartFile = multipartRequest.getFile(fileName);
     }
     if (multipartFile == null) {
       if (StringUtils.isNotBlank(fileName)) {
         if (logger.isDebugEnabled()) {
           logger.debug(
               "not found multipartFile named "
                   + fileName
                   + " in this request: "
                   + inv.getRequestPath().getUri());
         }
       } else {
         if (logger.isDebugEnabled()) {
           logger.debug(
               "not found MultipartFile named:"
                   + metaData.getParamName()
                   + " in this request: "
                   + inv.getRequestPath().getUri());
         }
       }
     }
   } else {
     if (logger.isDebugEnabled()) {
       logger.debug(
           "cann't set MultipartFile param to method "
               + ", the request is not a MultipartRequest");
     }
   }
   return multipartFile;
 }