目录

  • 报错信息
  • 分析
  • 问题解决

报错信息

java.lang.ClassCastException: org.springframework.web.servlet.handler.AbstractHandlerMapping$PreFlightHandler cannot be cast to org.springframework.web.method.HandlerMethodat com.merc.gmall.interceptors.AuthInterceptor.preHandle(AuthInterceptor.java:23) ~[classes/:na]at org.springframework.web.servlet.HandlerExecutionChain.applyPreHandle(HandlerExecutionChain.java:133) ~[spring-webmvc-4.3.14.RELEASE.jar:4.3.14.RELEASE]at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:962) ~[spring-webmvc-4.3.14.RELEASE.jar:4.3.14.RELEASE]at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) ~[spring-webmvc-4.3.14.RELEASE.jar:4.3.14.RELEASE]at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) ~[spring-webmvc-4.3.14.RELEASE.jar:4.3.14.RELEASE]at org.springframework.web.servlet.FrameworkServlet.doOptions(FrameworkServlet.java:908) ~[spring-webmvc-4.3.14.RELEASE.jar:4.3.14.RELEASE]at javax.servlet.http.HttpServlet.service(HttpServlet.java:670) ~[tomcat-embed-core-8.5.27.jar:8.5.27]at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) ~[spring-webmvc-4.3.14.RELEASE.jar:4.3.14.RELEASE]at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) ~[tomcat-embed-core-8.5.27.jar:8.5.27]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-8.5.27.jar:8.5.27]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.27.jar:8.5.27]at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) ~[tomcat-embed-websocket-8.5.27.jar:8.5.27]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.27.jar:8.5.27]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.27.jar:8.5.27]at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) ~[spring-web-4.3.14.RELEASE.jar:4.3.14.RELEASE]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.14.RELEASE.jar:4.3.14.RELEASE]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.27.jar:8.5.27]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.27.jar:8.5.27]at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:108) ~[spring-web-4.3.14.RELEASE.jar:4.3.14.RELEASE]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.14.RELEASE.jar:4.3.14.RELEASE]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.27.jar:8.5.27]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.27.jar:8.5.27]at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81) ~[spring-web-4.3.14.RELEASE.jar:4.3.14.RELEASE]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.14.RELEASE.jar:4.3.14.RELEASE]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.27.jar:8.5.27]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.27.jar:8.5.27]at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) ~[spring-web-4.3.14.RELEASE.jar:4.3.14.RELEASE]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.14.RELEASE.jar:4.3.14.RELEASE]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.27.jar:8.5.27]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.27.jar:8.5.27]at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) ~[tomcat-embed-core-8.5.27.jar:8.5.27]at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat-embed-core-8.5.27.jar:8.5.27]at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504) [tomcat-embed-core-8.5.27.jar:8.5.27]at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) [tomcat-embed-core-8.5.27.jar:8.5.27]at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) [tomcat-embed-core-8.5.27.jar:8.5.27]at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) [tomcat-embed-core-8.5.27.jar:8.5.27]at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) [tomcat-embed-core-8.5.27.jar:8.5.27]at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803) [tomcat-embed-core-8.5.27.jar:8.5.27]at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.27.jar:8.5.27]at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790) [tomcat-embed-core-8.5.27.jar:8.5.27]at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459) [tomcat-embed-core-8.5.27.jar:8.5.27]at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.27.jar:8.5.27]at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_181]at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_181]at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.27.jar:8.5.27]at java.lang.Thread.run(Thread.java:748) [na:1.8.0_181]

分析

  • 从报错信息可知,问题出现在AuthInterceptor的第23行。这里的代码是这样的
@Component
public class AuthInterceptor extends HandlerInterceptorAdapter {public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 拦截代码// 判断被拦截的请求的访问的方法的注解(是否时需要拦截的)HandlerMethod hm = (HandlerMethod) handler;//省略...
}
  • 在第23行,代码中做了一个强制类型转换。根据异常信息,在这里得到的handler是一个PreFlightHandler,而不是HandlerMethod。所以会报错。
    这里的PreFlightHandler和HandlerMethod分别是什么呢?
    AbstractHandlerMapping.PreFlightHandler【官方文档】

问题解决

  • 只需要在这句话前加入一个判断就好
if (!(handler instanceof HandlerMethod)) {return false;
}
HandlerMethod handlerMethod = (HandlerMethod) handler;
  • 参考
    https://blog.51cto.com/winters1224/2049425
    https://www.cnblogs.com/nihilwater/p/13456191.html

AbstractHandlerMapping$PreFlightHandler can‘t be cast to springframework.web.method.HandlerMethod相关推荐

  1. cannot be cast to org.springframework.web.method.HandlerMethod 统一异常处理发生异常。

    加入这个: <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandl ...

  2. org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert val

    org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert val ...

  3. 报错,null [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException,Failed to con

    问题: {     "success": false,     "code": "S0000",     "error" ...

  4. Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException

    废话不多说 上报错 Resolved [org.springframework.web.method.annotation. MethodArgumentTypeMismatchException: ...

  5. org.springframework.web.servlet.resource.ResourceHttpRequestHandler cannot be cast to org.springfra

    org.springframework.web.servlet.resource.ResourceHttpRequestHandler cannot be cast to org.springfram ...

  6. StandardMultipartHttpServletRequest$StandardMultipartFile cannot be cast to org.springframework.web

    错误: java.lang.ClassCastException: org.springframework.web.multipart.support.StandardMultipartHttpSer ...

  7. Java之——java.lang.NoSuchMethodException: [org.springframework.web.multipart.MultipartFile;.()

    转自:https://blog.csdn.net/l1028386804/article/details/65449355 ava.lang.NoSuchMethodException: [org.s ...

  8. org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.logException Resolved

    场景: spring项目中无法访问到对应controller,查看日志,没有报错,只有warnring: org.springframework.web.servlet.handler.Abstrac ...

  9. org.springframework.web.multipart.MultipartException: Current request is not a multipart request

    在做项目时,后端采用上传文件组件MultipartFile时,使用swagger测试文件上传出现了以下问题: 2022-03-24 22:02:07 |ERROR |http-nio-9000-exe ...

最新文章

  1. C#使用CDO发送邮件
  2. 算法岗面经整理!查漏补缺
  3. 网速,果然如此!| 每日趣闻
  4. IntelliJ IDEA 2019.2最新解读:性能更好,体验更优,细节处理更完美!
  5. 超市账单管理系统设计思路
  6. csapp:无符号数可能造成的程序bug
  7. 数据中台实战(四):商品分析(产品设计篇)
  8. 【Python】青少年蓝桥杯_每日一题_12.11_开关灯问题
  9. 【Python整蛊合集】多份整蛊代码,发给朋友之后我.....(友尽系列推荐)
  10. 【Python】远离 Python 最差实践,避免挖坑
  11. 【转】常用的工业测量坐标系
  12. TCL 中upvar 用法 (摘自http://www.cnblogs.com/kane1990/archive/2011/12/19/2293981.html)
  13. 如何定义一个只能在堆上(栈上)生成对象的类?
  14. linux中until循环的特点,Bash 中的 until 循环详解
  15. 使用oracle/mysql/tidb由空格引发的血案解析
  16. 「leetcode」349. 两个数组的交集:哈希值太大了,还是得用set
  17. 通达OA 商务平台OA2017新版本简易评测(图文)
  18. 基于MATLAB的数字图像处理-图像进行灰度化
  19. Python Excel教程之如何将多个 excel 文件合并为一个文件(教程含源码)
  20. 创建一个员工类(Employee),其中包括:1) 4个私有属性:员工姓名(name)、员工年龄(age)、员工职位(position)、工资(salary)

热门文章

  1. boost spirit ——编译器,语法解析器
  2. chm文件打不开的解决方法
  3. 安卓14我们该知道的一切(从隐私到可访问性等等)
  4. Java中随机数的产生
  5. mount 中文man(转)
  6. DDR3 出线 走线方法
  7. idea maven报红,但是项目中有jar包,提示找不到xx类
  8. eclipse中设置字体大小
  9. sql优化+索引优化+详解(存储过程+函数 创建千万的测试数据)
  10. 领域驱动设计系列文章(1)——通过现实例子显示领域驱动设计的威力