• 自定义全局异常


    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注解

  • 相关阅读:
    职场中,如何更高效地分析和解决问题(一)
    Nginx默认会自动忽略请求头Headers里带下划线_的参数
    119.网络游戏逆向分析与漏洞攻防-邮件系统数据分析-邮件读取与删除功能的封装
    web移动开发之flex(弹性盒子---知识点篇)
    计算机视觉的应用12-卷积神经网络中图像特征提取的可视化研究,让大家理解特征提取的全过程
    【NSArray数组的持久化 Objective-C语言】
    安卓手机微信收不到消息提醒,这样设置就能轻松解决
    lstm单变量单步预测
    [MySQL数据库部署及初始化相关]
    四种Python逐行读取文件内容的方法
  • 原文地址:https://blog.csdn.net/m0_63615119/article/details/132839542