org.springframework.beans.factory.UnsatisfiedDependencyException

本文详细解析了在Tomcat环境下启动SSM项目时遇到的拦截器配置错误,具体表现为自定义拦截器Interceptor1未实现HandlerInterceptor接口,导致Spring框架无法识别并正确转换其类型。文章深入探讨了实现HandlerInterceptor接口的必要性及其方法,包括preHandle、postHandle和afterCompletion等关键方法的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Tomcat启动SSM项目的时候出现如下错误:

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘org.springframework.web.servlet.handler.MappedInterceptor#2’: Unsatisfied dependency expressed through constructor argument with index 2 of type (类型为2的构造函数参数表示的不满意的依赖关系)[org.springframework.web.servlet.HandlerInterceptor]: Could not convert constructor argument value of type(无法转换类型的构造函数参数值) [com.akaiqi.interceptor.Interceptor1] to required type [org.springframework.web.servlet.HandlerInterceptor]: Failed to convert value of type [com.akaiqi.interceptor.Interceptor1] to required type [org.springframework.web.servlet.HandlerInterceptor]; nested exception is java.lang.IllegalStateException: Cannot convert value of type [com.akaiqi.interceptor.Interceptor1] to required type [org.springframework.web.servlet.HandlerInterceptor]: no matching editors or conversion strategy found

Error:无法将类型 [com.akaiqi.interceptor.Interceptor1] 的值转换为必需的类型[org.springframework.web.servlet.HandlerInterceptor]:,没有找到匹配的编辑器或转换策略。
简单说我自己定义的拦截器Interceptor1并没有实现HandlerInterceptor接口(或者JDK的其他拦截器接口),所以Interceptor1不是个拦截器而只是普通的类,系统无法识别。

实现了HandlerInterceptor接口必须实现三个方法,如下:

public class Interceptor1 implements HandlerInterceptor {

    //在调用控制器(Controller)之前preHandle方法被执行,如果该方法返回true,则调用下一个拦截器的preHandle方法.
    //如果所有的preHandle都返回true,则调用控制器(Controller)进行处理。如果返回fase则终止请求的执行
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		...
    }

    //在执行控制器(Controller)的方法时调用,而且控制器中所有的代码执行完之后调用postHandle方法,该方法能够处理模型数据
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
       ...
    }

    //当控制器执行完后,将模型与视图返回给核心控制器,核心控器渲染完视图之后afterCompletion调用。
    //只有对应的preHandle返回true时该方法才会调用
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
      ...
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值