RequestRequireAOP.java 2.0 KB
package com.tianbo.warehouse.annotation;

import org.apache.commons.lang.StringUtils;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint;
import org.springframework.stereotype.Component;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * controller层增强类,用于检测字符参数为空的情况,为空如""和null 都返回Null,为以后逻辑适配用
 * @author mrz
 * @date 9:52 2019/04/15
 * @params pjp
 * @throws
 * @return java.lang.Object
 **/
@Component
@Aspect
public class RequestRequireAOP {

    private static final Logger logger = LoggerFactory.getLogger(RequestRequireAOP.class);

    static final String split = ",";

    @Pointcut("@annotation(com.tianbo.warehouse.annotation.RequestRequire)")
    public void controllerInteceptor() {

    }

    @Around("controllerInteceptor()")
    public Object around(ProceedingJoinPoint pjp) throws Throwable {

        // 获取注解的方法参数列表
        Object[] args = pjp.getArgs();

        // 获取被注解的方法
        MethodInvocationProceedingJoinPoint mjp = (MethodInvocationProceedingJoinPoint) pjp;
        MethodSignature signature = (MethodSignature) mjp.getSignature();
        Method method = signature.getMethod();

        // 获取方法上的注解
        RequestRequire require = method.getAnnotation(RequestRequire.class);

        for(int i =0;i<args.length; i++){
            //class相等表示是同一个对象
            if (null!=args[i] && args[i].getClass().getName().equals("java.lang.String")) {

                    if (((String)args[i]).isEmpty()){
                        args[i] = null;
                    }
            }
        }

        // 如果没有报错,放行
        return pjp.proceed(args);
    }
}