• JAVA全局异常处理


    目录

     1、问题引入

    2、代码编写


     1、问题引入

    我们需要对程序中可能出现的异常进行捕获,通常有两种处理方式:

    1. 使用 try...catch 直接进行异常捕获,但是这种方式太繁琐了,难不成我有一个异常我就要写一次try...catch吗?虽然可以解决,但是存在弊端代码冗余,不通用。
    2. 使用异常处理器进行全局异常捕获,采用这种方式来实现,我们只需要在项目中定义一个通用的全局异常处理器,就可以解决本项目的所有异常。

    2、代码编写

    在项目中自定义一个全局异常处理器,在异常处理器上加上注解 @ControllerAdvice,可以通过属性annotations指定拦截哪一类的Controller方法。

    创建好全局异常处理器后,我们就可以去编写异常处理方法。

    1. import lombok.extern.slf4j.Slf4j;
    2. import org.springframework.stereotype.Controller;
    3. import org.springframework.web.bind.annotation.ControllerAdvice;
    4. import org.springframework.web.bind.annotation.ExceptionHandler;
    5. import org.springframework.web.bind.annotation.ResponseBody;
    6. import org.springframework.web.bind.annotation.RestController;
    7. import java.sql.SQLIntegrityConstraintViolationException;
    8. /**
    9. * 全局异常处理
    10. */
    11. @ControllerAdvice(annotations = {RestController.class, Controller.class})
    12. @ResponseBody
    13. @Slf4j
    14. public class GlobalExceptionHandler {
    15. /**
    16. * 异常处理方法 @ExceptionHandler 来指定拦截的是那一类型的异常。
    17. * @return
    18. */
    19. @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
    20. public R exceptionHandler(SQLIntegrityConstraintViolationException ex){
    21. // 打印异常信息 例如 : Duplicate entry '666' for key 'idx_username'
    22. log.error(ex.getMessage());
    23. // 判断异常信息是否包括
    24. if(ex.getMessage().contains("Duplicate entry")){
    25. // 异常信息有空格,所以我们可以通过空格进行截取 获得一个数组
    26. String[] split = ex.getMessage().split(" ");
    27. String msg = split[2] + "已存在";
    28. // 返回异常处理信息
    29. return R.error(msg);
    30. }
    31. return R.error("未知错误");
    32. }
    33. }

    上述的全局异常处理器上使用了的两个注解 @ControllerAdvice , @ResponseBody , 他们的作用分别为:

    1. @ControllerAdvice : 指定拦截那些类型的控制器;
    2. @ResponseBody: 将方法的返回值 R 对象转换为json格式的数据, 响应给页面;

    上述使用的两个注解, 也可以合并成为一个注解 @RestControllerAdvice

  • 相关阅读:
    PLC串口通讯和通讯接口知识汇总
    简单易修改的弹框组件
    你可能不知道的HTML小技巧 面试题小技巧
    Web前端一套全部清晰 ① 学习路线
    页面首次被加载方法
    Java:关于Java和Python你应该知道的区别
    Vue中如何进行表格排序与过滤
    厨卫电器行业B2B交易协同管理平台开发,优化企业库存结构
    毕业季 | 在不断探索中拟合最好的自己
    微服务中的服务发现是什么?
  • 原文地址:https://blog.csdn.net/weixin_53041251/article/details/126855725