如何在joinpoint.getArgs()中获取方法参数值?

时间:2017-10-31 05:49:27

标签: spring aop spring-aop

    String type = "";
if("searchClientContactDetails".equalsIgnoreCase(methodName) || "getClientAndVendorOrgDeatilsById".equalsIgnoreCase(methodName) 
                || "saveVenodrContact".equalsIgnoreCase(methodName) || "getSpocAndOwnerDetailsById".equalsIgnoreCase(methodName)
                || "terminateSpoc".equalsIgnoreCase(methodName)){
    Object[] args = joinPoint.getArgs();
            Object arg=args[0];
            Class c=arg.getClass();
            type=(String)c.getMethod("getResponderType").invoke(arg);
}

从上面的代码中,如果我的getResponderType值在args [0]中,那么我得到了所需的值,如果我的值存在于args [1]或args [2]中(如果多个方法使用相同的话)该怎么办? 。在我的代码中,我将在少数方法的第一个参数中获得“getResponderType”值,而在另一个方法中,我将在第二个或第三个参数中获取它。

2 个答案:

答案 0 :(得分:0)

如果提供方法声明会更容易。 因为

 void searchClientContactDetails(String a, Integer b);      
 void searchClientContactDetails(Long a, String b);

你的

Object[] args = joinPoint.getArgs();
Object arg=args[0];

将返回不同的值。

也许这是你的问题)

答案 1 :(得分:0)

您可以遍历args寻找方法getResponderType。一旦找到了你想要的东西,你就可以休息。

String type = "";
Object[] args = joinPoint.getArgs();
for (Object arg : args) {
    Class clazz = arg.getClass();
    try {
        Method mthd = arg.getClass().getMethod("getResponderType");
        if (mthd != null) {
            type = (String) clazz.getMethod(
                            "getResponderType").invoke(arg);
            break;
        }
    } catch (Exception e) {
        //do nothing
    }
}