建网站需要用到什么软件,外贸网站建设推广费用,好制作网站公司,知乎 wordpress一、目的 当客户端/前端向服务端发送一个请求后#xff0c;这个请求并不是每次都能完全正确的处理#xff0c;比如出现一些资源不存在、参数错误或者内部错误等信息的时候#xff0c;就需要将异常反馈给客户端或者前端。那么这就需要程序有完整的异常处理机制。 在 Java 中所…一、目的 当客户端/前端向服务端发送一个请求后这个请求并不是每次都能完全正确的处理比如出现一些资源不存在、参数错误或者内部错误等信息的时候就需要将异常反馈给客户端或者前端。那么这就需要程序有完整的异常处理机制。 在 Java 中所有异常的基类都是 Throwable 延伸出来但通常不使用 Throwable在该基类延伸出来 Error 和 Exception 两种异常严格意义上讲 Error 不属于异常而是错误Exception 才是异常两者有什么区别呢 错误所谓错误就是应用发生错误的是就启动不起来一般都是操作系统或者是 JVM 级别上发生的错误一旦发生错误我们是无法通过代码来进行处理的 异常 Exception 一般是我们可以通过代码来进行处理的例如我们平时查询数据库没有找到某一条记录就是一个典型的空异常再比如我们进行计算的时候分母为 0 也会报一个异常。 Error 在平常工作我们是不需要处理重点就是 ExceptionException 又分为两种一种是 CheckedException 异常另一种是 RuntimeException 异常这两个异常的区别是 CheckedException 要求必须在代码中进行处理如果不处理程序连编译都无法通过RuntimeException不要求强制进行处理因为这个异常属于运行的异常不一定在编译阶段就能发现。
二、实现 SpringBoot中ControllerAdvice 即可开启全局异常处理使用该注解表示开启了全局异常的捕获我们只需在自定义一个方法使用ExceptionHandler注解然后定义捕获异常的类型即可对这些捕获的异常进行统一的处理。
一、定义一个全局异常处理类 RestControllerAdvice
public class GlobalExceptionAdvice {// 处理已知异常(自定义异常)ExceptionHandler(NepException.class)public ResponseEntity handleNepException(NepException e) {return new ResponseEntity(400, 空指针异常 e.getMessage(), );}// 未知异常ExceptionHandler(Exception.class)public ResponseEntity handleException(Exception e) {return new ResponseEntity(400, 未知异常 e.getMessage(), );}}二、返回体
Data
AllArgsConstructor
NoArgsConstructor
public class ResponseEntity {private Integer code;private String message;private Object data;
}3、全局运行时异常拦截 GetMapping(/aa)
public ResponseEntity aa(){double a 1/0;return new ResponseEntity(200,请求成功,);
}GetMapping(bb)
public ResponseEntity bb(){ResponseEntity responseEntity null;try {responseEntity.getCode();}catch (NullPointerException nullPointerException){throw new NepException();}return new ResponseEntity(200,请求成功,);
}
四、自定义异常类
public class NepException extends NullPointerException{}五、全局异常返回 四、总结
整个流程就是全局异常拦截当然不止这一行几行代码很多地方都可以根据我们自身实际业务情况以此为基础进一步丰富比如返回数据可以改成跳转某一个具体的页面。这样的出场方式是不是都很优雅。总的来说我们可以根据自身业务和实际需求对异常进行全局处理。