通过@RestControllerAdvice和@ExceptionHandler结合处理全局异常,是目前springboot中比较常用的方式。
自定义异常类型
public class MyException extends RuntimeException { private int errno; private String errmsg; public ErrorResponse(int errno, String errmsg) { this. errno = errno; this.errmsg = errmsg; }}
新建异常信息实体类
public class RestResultDTO implements Serializable { private int errno; private String errmsg; private U data; public RestResultDTO(int errno, String errmsg, U data) { this. errno = errno; this.errmsg = errmsg; this.data = data; }}
新建异常处理类
在类上加上@ControllerAdvice注解这个类就成为了全局异常处理类,通过@ExceptionHandler指定对应异常
@RestControllerAdvicepublic class GlobalExceptionHandler { private static final Logger LOGGER = LoggerFactory.getLogger(GlobalExceptionHandler.class); /** * 拦截业务异常 */ @ExceptionHandler(MyException.class) public RestResultDTO myException(MyException e) { return new RestResultDTO(e.getErrorNo(), e.getErrorMessage(), null); } /** * 拦截未知的运行时异常 */ @ExceptionHandler(Exception.class) public RestResultDTO exception(Exception e) { LOGGER.error(e.getMessage(), e); return new RestResultDTO(Contants.INTERNAL_ERROR, StringUtils.isNotBlank(e.getMessage()) ? e.getMessage() : "", null); }}
|