В перехватчике 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());
}
}
Во всех остальных случаях объект обработчика будет указывать на контроллер. Большинство документов в Интернете, казалось, пропустили эту тонкую точку.