java注解获取请求参数值

一、获取注解参数java

MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
//获取注解参数值
ValidateUrl validateObj = methodSignature.getMethod().getAnnotation(ValidateUrl.class);
String serviceName = validateObj.serviceName();
String sourceSystem = generateKeyBySpEL(validateObj.sourceSystem(), joinPoint);

二、解析参数值spring

/**
     * 解析SpEL表达式
     * @param spELString
     * @param joinPoint
     * @return
     */
    private String generateKeyBySpEL(String spELString, JoinPoint joinPoint) {

        if(StringUtils.isBlank(spELString)){
            return null;
        }

        // 经过joinPoint获取被注解方法
        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
        Method method = methodSignature.getMethod();
        // 使用spring的DefaultParameterNameDiscoverer获取方法形参名数组
        String[] paramNames = nameDiscoverer.getParameterNames(method);
        // 解析事后的Spring表达式对象
        Expression expression = parser.parseExpression(spELString);
        // spring的表达式上下文对象
        EvaluationContext context = new StandardEvaluationContext();
        // 经过joinPoint获取被注解方法的形参
        Object[] args = joinPoint.getArgs();
        // 给上下文赋值
        for(int i = 0 ; i < args.length ; i++) {
            context.setVariable(paramNames[i], args[i]);
        }
        // 表达式从上下文中计算出实际参数值
        /*如:@annotation(key="#student.name")
          那么就能够解析出方法形参的某属性值“Tom”
         */
        return expression.getValue(context).toString();
    }
相关文章
相关标签/搜索