2013-07-10 3 views
10

एक वसंत-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 के साथ सावधान) नहीं है।

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

} 

अन्य सभी मामलों में, हैंडलर वस्तु: HandlerMethod तो तरीकों आप एनोटेशन प्राप्त करने के लिए उपयोग कर सकते हैं, आदि

+1

@ रीमेमस बिल्कुल, जब तक आपको पता न हो कि आपके पास केवल हैंडलर विधियां हैं। उदाहरण के लिए, यदि ऐप को अनुरोधों को संभालने के लिए केवल '@ नियंत्रक' है, तो आपको केवल 'हैंडलर मोड' उदाहरण होने की गारंटी है। मदद के लिए –

+0

धन्यवाद =) – Troncador

9

HandlerInterceptors केवल आप HandlerMethod के लिए पहुँच यदि आप ऐसा तरह अपने इंटरसेप्टर पंजीकृत किया है प्रदान करेगा है नियंत्रक को इंगित करेंगे। वेब पर अधिकांश दस्तावेज इस सूक्ष्म बिंदु को याद करते थे।

+1

लेकिन ऐसा क्यों है? क्या आप कुछ जानकारी प्रदान कर सकते हैं कि यह '' '' के साथ spring.xml के अंदर घोषित करते समय क्यों काम नहीं करता है। – jmattheis

संबंधित मुद्दे