java基础02-自定义异常,异常处理,企业级全局异常捕获

导读:本篇文章讲解 java基础02-自定义异常,异常处理,企业级全局异常捕获,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

前言:

程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。异常处理的必要性:所有的程序都存在一些未知的问题或是错误,如果这些问题不进行处理,可能会给用户造成一定的损失。异常处理:程序中一旦有异常发生,则会执行提前准备好的一段代码,减少损失,不会中断程序。
java中的异常指的是什么?
Java 中的异常(Exception)又称为例外,是一个在程序执行期间发生的事件,它中断正在执行的程序的正常指令流。为了能够及时有效地处理程序中的运行错误,必须使用异常类。

企业级开发中,经常需要我们自定义异常,方法如下:

自定义异常

package com.xusj.exception;

/**
 * 自定义异常,继承RuntimeException
 *
 * @author xusj
 * <br>CreateDate 2022/7/6 16:19
 */
public class MyException extends RuntimeException {
    /**
     * 自定义异常的属性:普通项目中主要包含如下两个属性
     * 1.错误code码
     * 2.错误信息
     */
    private int code;
    private String msg;

    /**
     * 定义构造方法:
     * 1.无参构造方法
     * 2.有参构造方法
     * 3.将自定义异常枚举类作为参数(这是企业级开发常用的异常处理方法)
     */
    public MyException() {
    }

    public MyException(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public MyException(ExceptionCode exceptionCode) {
        this.code = exceptionCode.getCode();
        this.msg = exceptionCode.getMsg();
    }

    /**
     * 提供set/get方法
     */
    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}

企业级开发经常使用的异常枚举类

package com.xusj.exception;

/**
 * 定义异常枚举类;
 * 这里使用枚举类,注意枚举类的使用
 *
 * @author xusj
 * <br>CreateDate 2022/7/6 16:27
 */
public enum ExceptionCode {
    /**
     * 超时异常
     */
    TIME_OUT(1, "超时"),
    /**
     * 权限异常
     */
    AUTH(2, "无权限");


    /**
     * 定义枚举类的属性
     */
    private int code;
    private String msg;

    /**
     * 提供枚举类构造方法
     */
    ExceptionCode(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    /**
     * 提供set/get方法
     */
    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}

企业级开发,全局异常捕获

package com.xusj.exception;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * 定义一个全局异常捕获处理器
 * 企业级开发中;常常基于spring进行全局异常处理的
 *
 * @author xusj
 * <br>CreateDate 2022/7/6 16:35
 */
@ControllerAdvice // 基于spring的全局通知注解
public class GlobalExceptionHandler {
    /**
     * Response这个是自定义返回结果,在企业级开发中会经常使用,可共参考
     * 有异常之后就会走这段逻辑,返回一个后端全局处理的异常,供前端使用
     */
    @ExceptionHandler(Exception.class) // 异常处理
    @ResponseBody // 统一返回
    public Response handleException(Exception e) {
        // 判断是否返回自定义异常
        if (e instanceof MyException) {
            return Response.ok(((MyException) e).getCode(), ((MyException) e).getMsg());
        }
        // 无定义直接返回
        return Response.ok(500, "服务端异常");
    }
}

企业级开发,全局返回类定义

package com.xusj.exception;

import lombok.Data;

/**
 * @author xusj
 * <br>CreateDate 2022/6/7 10:48
 */
@Data
public class Response<T> {
    /**
     * 编码,默认0表示成功
     */
    private int code = 200;

    /**
     * 编码对应的描述信息
     */
    private String msg;

    /**
     * 数据
     */
    private T data;

    public Response(Integer code, String msg) {
        this.msg = msg;
        this.code = code;
    }

    public Response() {
    }

    public static Response ok(String msg) {
        Response r = new Response();
        r.setMsg(msg);
        return r;
    }

    public static <T> Response ok(T data) {
        Response r = new Response();
        r.setData(data);
        return r;
    }

    public static Response ok() {
        return new Response();
    }

    public static Response ok(Integer code, String msg) {
        return new Response(code, msg);
    }
}

总结:

1、自定义异常:不仅仅只局限于java中内置的异常,同样我们也可以自定义自己想要的便于自己业务的异常。
2、全局捕获异常,一般分布式项目中所有的项目都会去引用全局捕获异常,封装成统一的结果返回给前端。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/96244.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!