10bet游戏平台
  咨询电话:13984066134

十博10BET官方网站

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 * @return21 * 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 * @return4 */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