赞
踩
前面的切面按自己的逻辑处理,获取请求参数的方法如下:
- private Map<String, Object> getFieldsName(JoinPoint joinPoint) throws Exception {
- String classType = joinPoint.getTarget().getClass().getName();
- String methodName = joinPoint.getSignature().getName();
- // 参数值
- Object[] args = joinPoint.getArgs();
- Class<?>[] classes = new Class[args.length];
- for (int k = 0; k < args.length; k++) {
- // 对于接受参数中含有MultipartFile,ServletRequest,ServletResponse类型的特殊处理,我这里是直接返回了null。(如果不对这三种类型判断,会报异常)
- if (args[k] instanceof MultipartFile || args[k] instanceof ServletRequest || args[k] instanceof ServletResponse) {
- return null;
- }
- if (!args[k].getClass().isPrimitive()) {
- // 当方法参数是基础类型,但是获取到的是封装类型的就需要转化成基础类型
- // String result = args[k].getClass().getName();
- // Class s = map.get(result);
-
- // 当方法参数是封装类型
- Class s = args[k].getClass();
-
- classes[k] = s == null ? args[k].getClass() : s;
- }
- }
- ParameterNameDiscoverer pnd = new DefaultParameterNameDiscoverer();
- // 获取指定的方法,第二个参数可以不传,但是为了防止有重载的现象,还是需要传入参数的类型
- Method method = Class.forName(classType).getMethod(methodName, classes);
- // 参数名
- String[] parameterNames = pnd.getParameterNames(method);
- // 通过map封装参数和参数值
- HashMap<String, Object> paramMap = new HashMap();
- for (int i = 0; i < parameterNames.length; i++) {
- paramMap.put(parameterNames[i], args[i]);
- }
- return paramMap;
- }
-
- private static HashMap<String, Class> map = new HashMap<String, Class>() {
- {
- put("java.lang.Integer", int.class);
- put("java.lang.Double", double.class);
- put("java.lang.Float", float.class);
- put("java.lang.Long", long.class);
- put("java.lang.Short", short.class);
- put("java.lang.Boolean", boolean.class);
- put("java.lang.Char", char.class);
- }
- };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。