2013-07-10 54 views
10

在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

但它只解決。我想要方法名稱來訪問註釋。

回答

16

您可以將Object handler投射到HandlerMethod

HandlerMethod method = (HandlerMethod) handler; 

然而要注意的handler參數傳遞給preHandle並不總是HandlerMethod(小心ClassCastException)。 HandlerMethod然後有方法,你可以用它來獲得批註等

+1

@Reimeus絕對,除非你知道你只有處理方法。例如,如果應用程序只有'@ Controller'來處理請求,那麼你只能保證'HandlerMethod'實例。 –

+0

感謝您的幫助=) – Troncador

9

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()); 
    } 

} 

在其他情況下,處理程序對象將指向控制器。網絡上的大多數文檔似乎都錯過了這個微妙的一點。

+1

但這是爲什麼呢?你能否提供一些信息,爲什麼當它在spring.xml中用''''聲明時不起作用。 – jmattheis

相關問題