统一异常处理

简介: 统一异常处理

实际我们在开发过程中可能需要做很多的判断校验,如果出现了非法情况我们是期望响应对应的提示

的。但是如果我们每次都自己手动去处理就会非常麻烦。我们可以选择直接抛出异常的方式,然后对异

常进行统一处理。把异常中的信息封装成 ResponseResult 响应给前端。

定义统一的异常类

我们需要定义服务中可能抛出的自定义异常类。这些异常类可以继承自RuntimeException,并携带有关异常的相关信息。即可理解为局部异常,用于特定的业务处理中异常。手动埋点抛出。

public class ZhiWenPlusException extends RuntimeException {
    private String errMessage;
 
    public ZhiWenPlusException() {
        super();
    }
 
    public ZhiWenPlusException(String errMessage) {
        super(errMessage);
        this.errMessage = errMessage;
    }
 
    public ZhiWenPlusException(AppHttpCodeEnum httpCodeEnum) {
        super(httpCodeEnum.getMsg());
        this.errMessage = httpCodeEnum.getMsg();
    }
 
    public String getErrMessage() {
        return errMessage;
    }
 
    public static void cast(CommonError commonError) {
        throw new ZhiWenPlusException(commonError.getErrMessage());
    }
 
    public static void cast(String errMessage) {
        throw new ZhiWenPlusException(errMessage);
    }
 
 
}

异常处理器

创建一个全局的异常处理器,使用@ControllerAdvice 或者 @RestControllerAdvice注解和@ExceptionHandler注解来捕获不同类型的异常,并定义处理逻辑。

@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
    @ExceptionHandler(SystemException.class)
    public ResponseResult systemExceptionHandler(SystemException e) {
        //打印异常信息
        log.error("出现了异常! {}", e);
        //从异常对象中获取提示信息封装返回
        return ResponseResult.errorResult(e.getCode(), e.getMsg());
    }
 
    @ExceptionHandler(Exception.class)
    public ResponseResult exceptionHandler(Exception e) {
        //打印异常信息
        log.error("出现了异常! {}", e);
        //从异常对象中获取提示信息封装返回
        return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR.getCode(), e.getMessage());
    }
}

@ControllerAdvice注解

用于声明一个全局控制器建言(Advice),相当于把@ExceptionHandler@InitBinder@ModelAttribute注解的方法集中到一个地方。常放在一个特定的类上,这个类被认为是全局异常处理器,可以跨足多个控制器。

当使用@ControllerAdvice时,我们需要在异常处理方法上加上@ResponseBody,同理我们的web接口。但是如果我们使用@RestControllerAdvice 就可以不用加,同理也是web定义的接口

@ExceptionHandler注解

用于定义异常处理方法,处理特定类型的异常。放在全局异常处理器类中的具体方法上。

通过这两个注解的配合,可以实现全局的异常处理。当控制器中抛出异常时,Spring Boot会自动调用匹配的@ExceptionHandler方法来处理异常,并返回定义的响应。


目录
相关文章
|
13天前
|
存储 C++
C++中的异常处理与错误管理
C++中的异常处理与错误管理
13 0
C++中的异常处理与错误管理
|
13天前
|
缓存 Java 程序员
【C++】一文全解C++中的异常:标准库异常体系&自定义异常体系(含代码演示)
【C++】一文全解C++中的异常:标准库异常体系&自定义异常体系(含代码演示)
|
13天前
|
运维 网络架构 索引
SSM整合-异常处理器及项目异常处理方案
SSM整合-异常处理器及项目异常处理方案
45 0
|
8月前
全局统一异常处理
全局统一异常处理
39 0
|
9月前
|
JSON Java API
基于SpringCloud封装统一的异常处理
在 Spring Cloud 中,可以通过自定义异常处理器来封装统一的异常处理逻辑。异常处理器能够捕获并处理应用程序中的异常,然后返回适当的错误响应。以下是一个基于 Spring Cloud 的统一异常处理的示例
|
12月前
|
消息中间件 JSON JavaScript
SpringMVC 统一异常处理实战
SpringMVC 统一异常处理实战
|
前端开发 Java 数据库
@RestControllerAdvice 统一异常处理
@RestControllerAdvice 统一异常处理
@RestControllerAdvice 统一异常处理
|
开发者 微服务
统一异常处理 | 学习笔记
快速学习 统一异常处理
54 0
|
设计模式 JSON 前端开发
使用ControllerAdvice完成异常统一处理
在我们平时的项目研发过程中,异常一般都是程序员最为头疼的问题,异常的抛出、捕获、处理等既涉及事务回滚,还会涉及返回前端消息提醒信息。那么我们怎么设计可以解决上面的两个的痛点呢?我们可不可以统一处理业务逻辑然后给出前端对应的异常提醒内容呢?

热门文章

最新文章