AbstractHandlerMapping$PreFlightHandler can‘t be cast to springframework.web.method.HandlerMethod
目录
- 报错信息
- 分析
- 问题解决
报错信息
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相关推荐
- cannot be cast to org.springframework.web.method.HandlerMethod 统一异常处理发生异常。
加入这个: <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandl ...
- org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert val
org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert val ...
- 报错,null [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException,Failed to con
问题: { "success": false, "code": "S0000", "error" ...
- Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException
废话不多说 上报错 Resolved [org.springframework.web.method.annotation. MethodArgumentTypeMismatchException: ...
- org.springframework.web.servlet.resource.ResourceHttpRequestHandler cannot be cast to org.springfra
org.springframework.web.servlet.resource.ResourceHttpRequestHandler cannot be cast to org.springfram ...
- StandardMultipartHttpServletRequest$StandardMultipartFile cannot be cast to org.springframework.web
错误: java.lang.ClassCastException: org.springframework.web.multipart.support.StandardMultipartHttpSer ...
- Java之——java.lang.NoSuchMethodException: [org.springframework.web.multipart.MultipartFile;.()
转自:https://blog.csdn.net/l1028386804/article/details/65449355 ava.lang.NoSuchMethodException: [org.s ...
- org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.logException Resolved
场景: spring项目中无法访问到对应controller,查看日志,没有报错,只有warnring: org.springframework.web.servlet.handler.Abstrac ...
- 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 ...
最新文章
- C#使用CDO发送邮件
- 算法岗面经整理!查漏补缺
- 网速,果然如此!| 每日趣闻
- IntelliJ IDEA 2019.2最新解读:性能更好,体验更优,细节处理更完美!
- 超市账单管理系统设计思路
- csapp:无符号数可能造成的程序bug
- 数据中台实战(四):商品分析(产品设计篇)
- 【Python】青少年蓝桥杯_每日一题_12.11_开关灯问题
- 【Python整蛊合集】多份整蛊代码,发给朋友之后我.....(友尽系列推荐)
- 【Python】远离 Python 最差实践,避免挖坑
- 【转】常用的工业测量坐标系
- TCL 中upvar 用法 (摘自http://www.cnblogs.com/kane1990/archive/2011/12/19/2293981.html)
- 如何定义一个只能在堆上(栈上)生成对象的类?
- linux中until循环的特点,Bash 中的 until 循环详解
- 使用oracle/mysql/tidb由空格引发的血案解析
- 「leetcode」349. 两个数组的交集:哈希值太大了,还是得用set
- 通达OA 商务平台OA2017新版本简易评测(图文)
- 基于MATLAB的数字图像处理-图像进行灰度化
- Python Excel教程之如何将多个 excel 文件合并为一个文件(教程含源码)
- 创建一个员工类(Employee),其中包括:1) 4个私有属性:员工姓名(name)、员工年龄(age)、员工职位(position)、工资(salary)