1. 拦截处理
经过拦截器测试,猜测,如果发生异常会去访问url:http://localhost:8080/errorpreHandle
对此,可以用拦截器进行拦截该路径信息,同一对异常进行处理,包括404页面异常
2. 特定异常处理
对于特定的异常,可以通过@ExceptionHandler注解,进行处理:
//添加ControllerAdvice,表示可以处理全局的异常
@ControllerAdvice
public class ZscExceptionHandler implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println(request.getRequestURL()+"preHandle发生异常--------------");
return true;
}
//Exception可以指定异常的类型,例如空指针异常、算术异常等等
@ExceptionHandler(Exception.class)
public void zscException(HttpServletRequest request, HandlerMethod method, Exception exception){
System.out.println("发生异常--------------");
}
}
3. 异常映射器
SimpleMappingExceptionResolver是系统提供的异常映射处理器
@Bean
public SimpleMappingExceptionResolver zscSimpleMappingExceptionResolver(){
//创建异常映射器
SimpleMappingExceptionResolver mapping = new SimpleMappingExceptionResolver();
//key为异常类型,v为跳转的页面
Properties mappings = new Properties();
mappings.setProperty("java.lang.NullPointerException","error1");
//添加异常类型
mapping.setExceptionMappings(mappings);
return mapping;
}
4. 继承HandlerExceptionResolver接口
@Component
public class MyExceptionResolve implements HandlerExceptionResolver {
/**
* 参数说明
* @param request 请求信息
* @param response 响应信息
* @param handler 传入的参数
* @param e 异常类型
* @return 返回null 表示没有发生异常
*/
@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response,
Object handler,
Exception e) {
if (e instanceof NullPointerException){
System.out.println(request.getRequestURL()+" : 发生空指针异常");
}
if (e instanceof ArithmeticException){
System.out.println(request.getRequestURL()+" : 发生算术异常");
}
return null;
}
}