全局异常处理类

本文介绍了如何在Java中创建一个全局异常处理类GlobalExceptionHandler,使用@ControllerAdvice和@ExceptionHandler注解处理@RestController和Controller类的错误,以及如何通过枚举封装常见错误并记录日志。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

全局异常处理类

创建步骤

  1. 定义一个自己的全局错误处理类GlobalExceptionHandler
  2. 创建一个ExceptionHandler类,主要是用@ControllerAdvice和 @ExceptionHandler处理错误信息
    以下说明各个注解的作用:
    • @ControllerAdvice(annotations = {RestController.class, Controller.class })//表示拦截类上加了RestController和Controller注解的controller
    • @ResponseBody//如果有方法需要返回json数据的就需要加上此注解,最终把结果封装成json数据返回
    • @Slf4j //写日志
    • @ExceptionHandler(SQLIntegrityConstraintViolationException.class)//表示这个方法处理的就是 SQLIntegrityConstraintViolationException中的错误信息,根据错误类型定
  3. 以上完成的是基本的异常处理,之后会通过枚举实现一些常用错误的封装,因为考虑到会有很多常用的报错信息,为了降低代码的重复和方便将来批量修改,在此基础上改动。

源代码示例

/**
 * 全局异常处理
 */
@ControllerAdvice(annotations = {RestController.class, Controller.class })//表示拦截类上加了RestController和Controller注解的controller
@ResponseBody//如果有方法需要返回json数据的就需要加上此注解,最终把结果封装成json数据返回
@Slf4j //写日志
public class GlobalExceptionHandler {

    /**
     * 异常处理方法
     * 一旦抛出SQLIntegrityConstraintViolationException这个异常,统一再次拦截处理
     * @return
     */
    @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
    public R<String> exceptionHandler(SQLIntegrityConstraintViolationException ex){
        log.info(ex.getMessage());

        if(ex.getMessage().contains("Duplicate entry")){
            String[] split = ex.getMessage().split(" ");
            String msg = split[2] + "已存在";
            return R.error(msg);
        }

        return R.error("未知错误");
    }
}

结果展示

在这里插入图片描述

未完待续!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

D. D

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值