В перехватчике Spring -mvc, как я могу получить доступ к методу контроллера контроллера?

В перехватчике Spring -mvc я хочу получить доступ к методу контроллера обработчика

public class CustomInterceptor implements HandlerInterceptor  {
    public boolean preHandle(
        HttpServletRequest request,HttpServletResponse response, 
            Object handler) {

        log.info(handler.getClass().getName()); //access to the controller class
        //I want to have the controller method
        ...
        return true;
   }
   ...
}

Я нашел:

how-to-get-controller-method-name-in-spring-interceptor-prehandle-method

Но он работает только. Я хочу, чтобы имя метода получало доступ к аннотации.

Ответ 1

Вы можете применить Object handler к HandlerMethod.

HandlerMethod method = (HandlerMethod) handler;

Обратите внимание, однако, что аргумент handler, переданный в preHandle, не всегда равен HandlerMethod (осторожно с ClassCastException). HandlerMethod, то есть методы, которые вы можете использовать для получения аннотаций и т.д.

Ответ 2

HandlerInterceptors будут только предоставлять вам доступ к HandlerMethod, если вы зарегистрировали свои перехватчики следующим образом:

@EnableWebMvc
@Configuration
public class InterceptorRegistry extends WebMvcConfigurerAdapter {

    @Override
    public void addInterceptors(org.springframework.web.servlet.config.annotation.InterceptorRegistry registry) {
        registry.addInterceptor(new InternalAccessInterceptor());
        registry.addInterceptor(new AuthorizationInterceptor());
    }

}

Во всех остальных случаях объект обработчика будет указывать на контроллер. Большинство документов в Интернете, казалось, пропустили эту тонкую точку.