全局异常处理_@RestControllerAdvice和@ExceptionHandler处理全局异常

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:56   1967   0

通过@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;    }}
7237249644b4fbb018fe5d9eb8b6e11e.gif

新建异常信息实体类

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;    }}
7237249644b4fbb018fe5d9eb8b6e11e.gif

新建异常处理类

在类上加上@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);    }}
7237249644b4fbb018fe5d9eb8b6e11e.gif
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP