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 {
...
}
}