springmvc框架的的搭建这里不再赘述,直接就开始全局异常和拦截器的配置。
1、全局异常
首先我们先创建一个专门放异常处理类的包,然后创建一个Myhandler的异常处理类。
//返回json数据 默认加上 @ResponseBody 也可以换成@ControllerAdvice 返回个jsp
@RestControllerAdvice
public class MyHandler {
//所有Exception一场都会经过下面这个方法
@ExceptionHandler(Exception.class)
public Result handler(){
return Result.error();
}
}
2、拦截器配置
下图时是HandlerInterceptor接口default修饰的三个方法的调用顺序。
下面对着三个方法详细解释下何时执行。
public class LoginInterceptor implements HandlerInterceptor {
//在controller执行之前执行此方法,只有此方法返回true时controller才会执行
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
return true;
}
//该方法将在请求处理之后,DispatcherServlet进行视图返回渲染之前进行调用,可以在这个方法中对Controller 处理之后的ModelAndView 对象进行操作
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
}
//该方法也是需要当前对应的Interceptor的preHandle方法的返回值为true时才会执行,该方法将在整个请求结束之后,也就是在DispatcherServlet 渲染了对应的视图之后执行。用于进行资源清理。
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
}
}
然后我们来创建一个MyInterceptor实现HandlerInterceptor接口
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//do something....
return true;
}
}
然后配置springmvc全局配置文件添加拦截器配置
<mvc:interceptors>
<mvc:interceptor>
<!--配置拦截路径-->
<mvc:mapping path="/**"/>
<!--配置放行路径
/* : 匹配一级,即 /list , /add 等
/** : 匹配多级,即 /add , /add/user, /add/user/… 等
-->
<mvc:exclude-mapping path="/user/**"/>
<!--配置拦截器位置-->
<bean class="com.gzh.interceptor.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>