如何使用SpringMVC拦截器的preHandle方法获取当前执行的目标方法

来源:2-3 拦截器方法介绍

胡车儿

2017-08-19 17:53

如访问http://localhost:8080/courses/testEncoding在拦截器中可以获取到testEncoding方法

ps:可以使用HandlerMethod获取到该方法,但是原本正常运行的程序会报错:

java.lang.ClassCastException: org.springframework.web.servlet.resource.ResourceHttpRequestHandler cannot be cast to org.springframework.web.method.HandlerMethod

页面可以显示,但是并无CSS样式。。删除HandlerMethod语句就可以正常运行


@Override

public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {

     System.out.println("执行preHandle");

     HandlerMethod hm = (HandlerMethod) arg2;

     System.out.println("当前执行的对象是"+hm.getMethod());

     return true;

}


写回答 关注

2回答

  • ghyg525
    2017-12-18 11:19:47

    if (o instanceof HandlerMethod) 

    强转之前加个判断

  • 胡车儿
    2017-08-19 19:10:08

    自问自答。。

    决定不钻牛角尖了,直接使用request.getRequestURI()获取到了。。。

    附上代码:

    @Override

    public boolean preHandle(HttpServletRequest request, HttpServletResponse arg1, Object arg2) throws Exception {

         System.out.println("执行preHandle");

         System.out.println("getRequestURI"+request.getRequestURI());

         return true;

    }

    以及SpringMVC配置文件中的拦截器配置

    <!-- 拦截来自所有的请求 -->

    <mvc:interceptors>

        <mvc:interceptor>

            <mvc:mapping path="/**"/>

            <mvc:exclude-mapping path="/**/fonts/*"/>

             <mvc:exclude-mapping path="/**/*.css"/>

             <mvc:exclude-mapping path="/**/*.js"/>

             <mvc:exclude-mapping path="/**/*.png"/>

             <mvc:exclude-mapping path="/**/*.gif"/>

             <mvc:exclude-mapping path="/**/*.jpg"/>

             <mvc:exclude-mapping path="/**/*.jpeg"/>

            <bean class="com.springmvc.demo.interceptor.TestInterceptor" />

        </mvc:interceptor>

    </mvc:interceptors>

Spring MVC拦截器

Spring MVC拦截器的工作原理及配置,介绍拦截器与过滤器的区别

73575 学习 · 59 问题

查看课程

相似问题