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();
    }
相關文章
相關標籤/搜索