SpringMVC异常处理

异常处理思路:系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。

系统的dao、service、controller出现都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理,如下图:

springmvc提供全局异常处理器(一个系统只有一个异常处理器)进行统一异常处理。


自定义异常类需要继承Exception:

 1 package cn.itcast.ssm.exception;
 2 
 3 public class CustomException extends Exception {
 4     
 5     //异常信息
 6     public String message;
 7     
 8     public CustomException(String message){
 9         super(message);
10         this.message = message;
11     }
12 
13     public String getMessage() {
14         return message;
15     }
16 
17     public void setMessage(String message) {
18         this.message = message;
19     }
20     
21     
22 
23 }
View Code

全局异常处理器:

处理思路:

解析出异常类型

如果该 异常类型是系统 自定义的异常,直接取出异常信息,在错误页面展示

 如果该 异常类型不是系统 自定义的异常,构造一个自定义的异常类型(信息为“未知错误”)

只要实现了HandlerExceptionResolver接口就是全局异常处理器

 1 package cn.itcast.ssm.exception;
 2 
 3 import javax.servlet.http.HttpServletRequest;
 4 import javax.servlet.http.HttpServletResponse;
 5 
 6 import org.springframework.web.servlet.HandlerExceptionResolver;
 7 import org.springframework.web.servlet.ModelAndView;
 8 
 9 public class CustomExceptionResolver implements HandlerExceptionResolver {
10 
11     /**
12      * (非 Javadoc)
13      * <p>Title: resolveException</p>
14      * <p>Description: </p>
15      * @param request
16      * @param response
17      * @param handler
18      * @param ex 系统 抛出的异常
19      * @return
20      * @see org.springframework.web.servlet.HandlerExceptionResolver#resolveException(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.Object, java.lang.Exception)
21      */
22     @Override
23     public ModelAndView resolveException(HttpServletRequest request,
24             HttpServletResponse response, Object handler, Exception ex) {
25         //handler就是处理器适配器要执行Handler对象(只有method)
26         
27 //        解析出异常类型
28 //        如果该 异常类型是系统 自定义的异常,直接取出异常信息,在错误页面展示
29 //        String message = null;
30 //        if(ex instanceof CustomException){
31 //            message = ((CustomException)ex).getMessage();
32 //        }else{
33 ////            如果该 异常类型不是系统 自定义的异常,构造一个自定义的异常类型(信息为“未知错误”)
34 //            message="未知错误";
35 //        }
36         
37         //上边代码变为
38         CustomException customException = null;
39         if(ex instanceof CustomException){
40             customException = (CustomException)ex;
41         }else{
42             customException = new CustomException("未知错误");
43         }
44         
45         //错误信息
46         String message = customException.getMessage();
47         
48         
49         ModelAndView modelAndView = new ModelAndView();
50         
51         //将错误信息传到页面
52         modelAndView.addObject("message", message);
53         
54         //指向错误页面
55         modelAndView.setViewName("error");
56 
57         
58         return modelAndView;
59     }
60 
61 }
View Code

 最后,在springmvc.xml配置全局异常处理器

原文地址:https://www.cnblogs.com/ustc-anmin/p/10494260.html