• 自定义全局异常


    1.自定义响应结果码 接口

    1. public interface ResultCode {
    2. //操作是否成功,true为成功,false操作失败
    3. boolean success();
    4. //操作代码
    5. int code();
    6. //提示信息
    7. String message();
    8. }

    2.自定义异常类

    1. import lombok.AllArgsConstructor;
    2. import lombok.Data;
    3. /**
    4. * 自定义异常类
    5. */
    6. @Data //lombok提供,getter,setter方法,toString
    7. @AllArgsConstructor //lombok提供,有参构造
    8. public class CustomException extends RuntimeException{
    9. private ResultCode resultCode;
    10. }

    3.自定义异常捕获类

    包括捕获自定义异常类,也包括不可预知异常。

    1. import org.springframework.web.bind.annotation.ControllerAdvice;
    2. import org.springframework.web.bind.annotation.ExceptionHandler;
    3. import org.springframework.web.bind.annotation.ResponseBody;
    4. /**
    5. * 定义异常捕获类
    6. * 使用 @ControllerAdvice@ExceptionHandler注解来捕获指定类型的异常
    7. */
    8. @ControllerAdvice
    9. public class ExceptionCatch {
    10. //捕获ExceptionCatch异常
    11. @ExceptionHandler(CustomException.class) //CustomException是自定义异常类
    12. @ResponseBody
    13. public ResponseResult customException(CustomException e){
    14. ResultCode resultCode = e.getResultCode();
    15. return new ResponseResult(resultCode);
    16. }
    17. //不可预知异常
    18. @ExceptionHandler(Exception.class)
    19. @ResponseBody
    20. public ResponseResult exception(Exception e){
    21. return new ResponseResult(CommonCode.SERVER_ERROR);//对于不知异常抛出99999异常
    22. }
    23. }

    4.自定义异常枚举类CommonCode

    自定义异常码和描述,实现ResultCode接口。

    1. import lombok.ToString;
    2. @ToString
    3. public enum CommonCode implements ResultCode{
    4. SUCCESS(true,10000,"操作成功!"),
    5. FAIL(false,11111,"操作失败!"),
    6. UNAUTHENTICATED(false,10001,"此操作需要登陆系统!"),
    7. UNAUTHORISE(false,10002,"权限不足,无权操作!"),
    8. VALIDATA(false,10003,"非法参数!"),
    9. SERVER_ERROR(false,99999,"抱歉,系统繁忙,请稍后重试!");
    10. // private static ImmutableMap codes ;
    11. //操作是否成功
    12. boolean success;
    13. //操作代码
    14. int code;
    15. //提示信息
    16. String message;
    17. private CommonCode(boolean success,int code, String message){
    18. this.success = success;
    19. this.code = code;
    20. this.message = message;
    21. }
    22. @Override
    23. public boolean success() {
    24. return success;
    25. }
    26. @Override
    27. public int code() {
    28. return code;
    29. }
    30. @Override
    31. public String message() {
    32. return message;
    33. }
    34. }

    测试

    在业务方法中添加。

    throw new CustomException(CmsCode.CMS_ADDPAGE_EXISTSNAME);//使用自定义异常

    测试未知异常:

    在业务方法中添加下面除0错进行测试。

    int i = 1/0;

    注意:

    2.自定义异常类

    1.ExceptionHandler(CustomException.class)中的异常类要和下面方法入参一致,否则会报错。

    2.控制台报错,SpringBoot引导类中@SpringBootApplication注解没有扫到异常捕获类CatchException所在的包。

    解决:在引导类上加注解@ComponentScan(basePackages = {"com.lxw.exception"})

    3.控制台不报错,但是页面也不显示错误信息,排除前端问题;异常捕获类的方法上没有加ResponseBody注解。

    原因:页面不需要跳转,要传json;并且注意不是@RequestBody注解

  • 相关阅读:
    【论文笔记】基于视觉特征提取的强化学习自动驾驶系统
    Latex 爬过的坑(5)——解决 IEEE 模板论文作者对齐问题
    Python分布式动态页面爬虫研究
    既要便捷、安全+智能,也要颜值,萤石发布北斗星人脸锁DL30F和极光人脸视频锁Y3000FV
    【 java 集合】集合体系概述
    mybatis-plus自动填充
    低代码在物品领用领域数字化转型的案例分析
    【计算机组成原理】第六章 总线
    基于PHP+MYSQL在线小说阅读网的设计与实现
    1.NoSQL之Redis配置与基础命令
  • 原文地址:https://blog.csdn.net/m0_63615119/article/details/132839542