SpringBoot(6) SpringBoot配置全局异常

@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 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 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 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 https://www.cnblogs.com/platycoden/p/9799900.html
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信