Как получить параметры имени метода в MethodInterceptor? - PullRequest
1 голос
/ 02 июня 2011

Я хотел бы получить имя параметра метода в классе MethodInterceptor.

public Object invoke(MethodInvocation invocation) throws Throwable {
    Method method = invocation.getMethod();
    Class<?> declaringClass = method.getDeclaringClass();
    Logger logger = LoggerFactory.getLogger(declaringClass);
    //here some treatment
    return invocation.proceed();
}

и я просто не могу найти, как получить с экземпляром MethodInvocation имя параметров метода.Я не уверен, что это возможно ..

Ответы [ 2 ]

2 голосов
/ 02 июня 2011

Вы не можете. Java не хранит имена параметров во время выполнения, поэтому перехватчики (или api отражения) не могут это получить. Один из способов решить эту проблему - заключить ваши параметры в один класс и создать поле с именами, соответствующими именам ваших параметров.

1 голос
/ 05 декабря 2013

Это возможно возможно, как я узнал здесь: Получение имени параметра метода

Ниже приведен пример с использованием Spring ParameterNameDiscoverer:

private Object getParameterName(Method specificMethod, int i) {
    // Project needs to be build with a -g (debug) option to contain information about parameter names.
    ParameterNameDiscoverer discoverer = new LocalVariableTableParameterNameDiscoverer();

    String parameterName = discoverer.getParameterNames(specificMethod)[i];
    if (parameterName != null) {
        return parameterName;
    }
    throw new IllegalArgumentException("Unable to determine parameter name. Please build the project with -g (debug) option.");
}
...