SpringBoot(6) SpringBoot配置全局异常

1、全局异常

@ControllerAdvice 如果是返回json数据 则用 RestControllerAdvice,就可以不加 @ResponseBody
//捕获全局异常,处理所有不可知的异常
@ExceptionHandler(value=Exception.class)

 1 @RestControllerAdvice
 2 public class CustomExtHandler {
 3 
 4     private static final Logger LOG = LoggerFactory.getLogger(CustomExtHandler.class);
 5 
 6     
 7     //捕获全局异常,处理所有不可知的异常
 8     @ExceptionHandler(value=Exception.class)
 9     Object handleException(Exception e,HttpServletRequest request){
10         LOG.error("url {}, msg {}",request.getRequestURL(), e.getMessage()); 
11         Map<String, Object> map = new HashMap<>();
12             map.put("code", 100);
13             map.put("msg", e.getMessage());
14             map.put("url", request.getRequestURL());
15             return map;
16     }
17     
18 }

 

2、自定义异常类型

自定义异常类型MyException

 1 /*
 2  * 功能描述: 建立自定义异常类 -- 继承运行异常最高类
 3  * 
 4  * */
 5 
 6 public class MyException extends RuntimeException{
 7     
 8     public MyException(String code, String msg){
 9         this.code = code;
10         this.msg = msg;
11     }
12     
13     private String code;
14     private String msg;
15     
16     public String getCode() {
17         return code;
18     }
19     public void setCode(String code) {
20         this.code = code;
21     }
22 
23     public String getMsg() {
24         return msg;
25     }
26 
27     public void setMsg(String msg) {
28         this.msg = msg;
29     }
30 
31 }

修改CustomExtHandler

 1 @RestControllerAdvice
 2 public class CustomExtHandler {
 3 
 4     private static final Logger LOG = LoggerFactory.getLogger(CustomExtHandler.class);
 5 
 6     
 7     //捕获全局异常,处理所有不可知的异常
 8     @ExceptionHandler(value=Exception.class)
 9     Object handleException(Exception e,HttpServletRequest request){
10         LOG.error("url {}, msg {}",request.getRequestURL(), e.getMessage()); 
11         Map<String, Object> map = new HashMap<>();
12             map.put("code", 100);
13             map.put("msg", e.getMessage());
14             map.put("url", request.getRequestURL());
15             return map;
16     }
17 
18     /**
19      * 功能描述: 处理自定义异常类
20      * @return
21      * 
22      */
23     @ExceptionHandler(value = MyException.class)
24     Object handleMyException(MyException e, HttpServletRequest request){
25         //进行页面跳转
26 //        ModelAndView modelAndView = new ModelAndView();
27 //        modelAndView.setViewName("error.html");
28 //        modelAndView.addObject("msg", e.getMessage());
29 //        return modelAndView;
30         
31         //f返回json数据
32         Map<String, Object> map = new HashMap<>();
33         map.put("code", e.getCode());
34         map.put("msg", e.getMessage());
35         map.put("url", request.getRequestURL());
36         return map;
37     }
38 }

 

模拟一个异常实现页面跳转

1 /**
2  * 功能描述: 模拟自定义异常
3  * @return
4  */
5 @RequestMapping(value = "/api/v1/myext")  
6 public Object myext() {
7     throw new MyException("500", "my ext异常");
8 }
9     

 

最后梳理顺序:

  首先,建立自定义异常类 MyException,继承于RuntimeException。如果出异常,在@RestControllerAdvice注释下的CustomExtHandler里面捕获,根据异常种类进行处理。

 

异常处理的官网地址: https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-error-handling

 

posted @ 2018-10-16 18:49  platycoden  阅读(6804)  评论(2编辑  收藏  举报