专栏名称: 程序员鱼皮
鹅厂全栈开发,持续分享编程技法和实用项目
目录
相关文章推荐
君姐深扒股市  ·  重磅:马斯克“报价900亿”买OPENAI! ·  昨天  
投资眼老A  ·  炸了,新的传闻! ·  昨天  
午间明道  ·  徐小明:稳中有升(0210) ·  3 天前  
午间明道  ·  徐小明:稳中有升(0210) ·  3 天前  
51好读  ›  专栏  ›  程序员鱼皮

今日代码大赏 | 统一异常处理类

程序员鱼皮  · 公众号  ·  · 2024-04-20 17:26

正文

一个完整的后端服务,异常处理是至关重要的环节。异常处理不仅涉及到系统的稳定性,还关系到用户体验。在SpringBoot 中,通过使用 @ControllerAdvice @ExceptionHandler 注解,我们可以轻松地实现全局异常处理。

上期,我们在 SpringBoot 中实现了统一返回结果类,统一异常处理类和统一返回结果类都是一个完整的后端服务必不可少的。有需要回顾 SpringBoot 实现了统一返回结果类,可以点击下方文章标题,即可跳转对应文章哦!

今日代码大赏 | 统一结果返回类

今天,我们就来了解如何在 SpringBoot 中创建一个统一的异常处理类。示例代码如下:

@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {

    // 处理所有未指定的异常
    @ExceptionHandler(Exception.class)
    public ResponseEntity handleException(Exception e) {
        Result result = new Result<>();
        result.setSuccess(false);
        result.setMessage("服务器内部错误");
        result.setCode(500);

        // 记录日志,便于问题追踪
        log.error("发生异常:", e);

        // 返回统一的错误响应
        return new ResponseEntity<>(result, HttpStatus.INTERNAL_SERVER_ERROR);
    }

    // 处理自定义异常
    @ExceptionHandler(CustomException.class)
    public ResponseEntity handleCustomException(CustomException e) {
        Result result = new Result<>();
        result.setSuccess(false);
        result.setMessage(e.getMessage());
        result.setCode(e.getCode());

        // 记录日志
        log.error("发生自定义异常:", e);

        // 返回统一的错误响应
        return new ResponseEntity<>(result, HttpStatus.BAD_REQUEST);
    }
}

在上面的代码中,我们定义了一个名为 GlobalExceptionHandler 的类,并使用 @ControllerAdvice 注解来指定这是一个全局异常处理器。 @ExceptionHandler 注解用于指定该方法处理的异常类型。对于所有未被捕获的通用异常,我们使用 Exception.class 来捕获并处理。对于自定义的异常 CustomException ,我们则返回更具体的异常信息和状态码。

今天的代码大赏就到这里了。希望通过这篇文章,你能够对在 SpringBoot 中实现一个统一异常处理类有一个更深入的理解。

完整代码片段来源于代码小抄,欢迎点击进入小程序阅读!

在线访问:https://www.codecopy.cn/post/fi8ebr

在代码小抄可以看到更多优质代码,也欢迎大家积极分享,可能会获得我们官方的小礼品 🎁~

往期推荐

这个 404 页面,是真的炫酷~

今日代码大赏 | 统一结果返回类







请到「今天看啥」查看全文