在SpringAOP中如何获取请求的参数和参数名

时间:2025-05-16 10:59:04

前面的切面按自己的逻辑处理,获取请求参数的方法如下:

private Map<String, Object> getFieldsName(JoinPoint joinPoint) throws Exception {
        String classType = ().getClass().getName();
        String methodName = ().getName();
        // 参数值
        Object[] args = ();
        Class<?>[] classes = new Class[];
        for (int k = 0; k < ; 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 = (result);

                // 当方法参数是封装类型
                Class s = args[k].getClass();

                classes[k] = s == null ? args[k].getClass() : s;
            }
        }
        ParameterNameDiscoverer pnd = new DefaultParameterNameDiscoverer();
        // 获取指定的方法,第二个参数可以不传,但是为了防止有重载的现象,还是需要传入参数的类型
        Method method = (classType).getMethod(methodName, classes);
        // 参数名
        String[] parameterNames = (method);
        // 通过map封装参数和参数值
        HashMap<String, Object> paramMap = new HashMap();
        for (int i = 0; i < ; i++) {
            (parameterNames[i], args[i]);
        }
        return paramMap;
    }

    private static HashMap<String, Class> map = new HashMap<String, Class>() {
        {
            put("", );
            put("", );
            put("", );
            put("", );
            put("", );
            put("", );
            put("", );
        }
    };