统一异常处理

简介: 统一异常处理

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

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

常进行统一处理。把异常中的信息封装成 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方法来处理异常,并返回定义的响应。


目录
相关文章
|
2月前
|
运维 C# UED
C# 一分钟浅谈:异常处理的最佳实践
【9月更文挑战第5天】在软件开发中,异常处理对保证程序稳定性和用户体验至关重要。本文从基础概念入手,详细讲解C#中的异常处理策略,并通过代码示例说明如何有效实现异常管理。文章涵盖`try`、`catch`和`finally`块的使用,探讨常见问题如忽略异常和过度捕获,并提出最佳实践建议,如使用具体异常类型、记录异常信息及优雅地处理异常,助力开发者构建更健壮的应用程序。
111 0
|
6月前
|
JavaScript 中间件 测试技术
中间件应用异常处理
【5月更文挑战第2天】中间件应用异常处理
59 2
中间件应用异常处理
|
6月前
|
存储 C++
C++中的异常处理与错误管理
C++中的异常处理与错误管理
35 0
C++中的异常处理与错误管理
全局统一异常处理
全局统一异常处理
60 0
|
JSON Java API
基于SpringCloud封装统一的异常处理
在 Spring Cloud 中,可以通过自定义异常处理器来封装统一的异常处理逻辑。异常处理器能够捕获并处理应用程序中的异常,然后返回适当的错误响应。以下是一个基于 Spring Cloud 的统一异常处理的示例
|
消息中间件 JSON JavaScript
SpringMVC 统一异常处理实战
SpringMVC 统一异常处理实战
|
前端开发 Java 数据库
@RestControllerAdvice 统一异常处理
@RestControllerAdvice 统一异常处理
@RestControllerAdvice 统一异常处理
|
开发者 微服务
统一异常处理 | 学习笔记
快速学习 统一异常处理