公众号merlinsea
- springboot中可以定义全局异常处理,即在项目中如何一个位置爆出异常,都会自动调用这个全家异常处理器进行处理。
- 定义业务异常类
- 业务异常类的信息主要包含业务状态码和额外信息
/** * 定义全局异常 */ @Data public class BizException extends RuntimeException{ private Integer code; private String msg; public BizException(Integer code, String message) { super(message); this.code = code; this.msg = message; } // BizCodeEnum 业务状态码的枚举 public BizException(BizCodeEnum bizCodeEnum) { super(bizCodeEnum.getMsg()); this.code = bizCodeEnum.getCode(); this.msg = bizCodeEnum.getMsg(); } }
- 定义异常处理器
- @ControllerAdvice 用于标识异常处理类
- @ExceptionHandler(value = Exception.class)用于标识异常处理类中的方法处理类型异常。 这个注解可以作用在类上也可以作用在方法上,
/** * 自定义全局异常处理器 * @ControllerAdvice 标识这个类是个异常处理类,当产生异常的时候,会更佳异常总类找对应的方法执行 * @ExceptionHandler(value = Exception.class)当子模块发生Exception的异常或者其子异常就会调用handle方法 * @ResponseBody 返回json数据 */ @ControllerAdvice @Slf4j public class CunstomExceptionHandle { @ExceptionHandler(value = Exception.class) @ResponseBody public JsonData handle(Exception e){ if(e instanceof BizException){ BizException bizException = (BizException) e; log.info("[业务异常:{}]",e.getMessage()); return JsonData.buildCodeAndMsg(bizException.getCode(),bizException.getMsg()); }else{ log.info("[非业务异常:{}]",e.getMessage()); return JsonData.buildError("全局异常,未知错误"); } } }