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); }
public BindingResult resolve(Invocation inv, ParamMetaData metaData) { if (metaData.getParamName() != null) { return inv.getBindingResult(metaData.getParamName()); } else { return inv.getParameterBindingResult(); } }
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; }
@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); }
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; }