前言:
程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。异常处理的必要性:所有的程序都存在一些未知的问题或是错误,如果这些问题不进行处理,可能会给用户造成一定的损失。异常处理:程序中一旦有异常发生,则会执行提前准备好的一段代码,减少损失,不会中断程序。
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