springboot优雅处理异常

这篇具有很好参考价值的文章主要介绍了springboot优雅处理异常。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用全局异常来避免冗余的代码:

使用全局异常前:

controller层通篇的try-catch以及大量重复的代码来捕获在service层抛出的异常

使用全局异常后:

只需要增加一个全局异常类,里面设置好要捕获的异常以及处理方式,就可以了,针对不通用的异常处理可以使用try-catch

全局异常设置:

package cn.test.account.handler;

import org.slf4j.LoggerFactory;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import cn.test.account.domain.ReturnCode;
import cn.test.account.exceptions.BusinessException;
import cn.test.account.model.response.CodeResponse;

/**
 * 全局异常类,处理未被捕获的异常
 */
@ControllerAdvice
public class GlobalExceptionHandler {
    private static final org.slf4j.Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);


    @ExceptionHandler(BusinessException.class)
    public ResponseEntity<?> handleBusinessException(BusinessException ex) {
        // 处理自定义异常并返回自定义响应
        CodeResponse idResponse = new CodeResponse();
        idResponse.setCode(ex.getCode());
        idResponse.setMessage(ex.getMessage());
        return ResponseEntity.ok().body(idResponse);
    }


    @ExceptionHandler(Exception.class)
    public ResponseEntity<?> handleException(Exception ex) {
        logger.error("runtimeException:", ex);
        CodeResponse idResponse = new CodeResponse();
        idResponse.setCode(ReturnCode.SYSTEM_IDENTIFY);
        idResponse.setMessage(ex.getMessage() != null ? ex.getMessage() : "system error");
        return ResponseEntity.ok().body(idResponse);
    }

}

其中BusinessException 是自定义异常,如下:

package cn.test.account.exceptions;

/**
 * @author aaa
 * @version 1.0.0
 * @create 2023-03-21 10:58
 */
public class BusinessException  extends BaseException{

    Integer code;

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public BusinessException() {
        super();
    }

    public BusinessException(String message, Throwable cause) {
        super(message, cause);
    }

    public BusinessException(String message) {
        super(message);
    }

    public BusinessException(Throwable cause) {
        super(cause);
    }

    public BusinessException(String message, Integer code,Throwable cause) {
        super(message, cause);
        this.code = code;
    }

    public BusinessException(String message, Integer code) {
        super(message);
        this.code = code;
    }
}
package cn.test.account.exceptions;

/**
 * 异常基类
 * @description: 异常基类
 * @author aaa
 * @date 2022/9/27 11:00
 * @version 1.0
 */
public class BaseException extends RuntimeException {
    public BaseException() {
        super();
    }

    public BaseException(String message, Throwable cause) {
        super(message, cause);
    }

    public BaseException(String message) {
        super(message);
    }

    public BaseException(Throwable cause) {
        super(cause);
    }
}

疑惑点:那么当有一个异常被捕获(即try-catch)后,会走全局异常还是catch中的逻辑呢?文章来源地址https://www.toymoban.com/news/detail-528147.html

try catch和全局异常的执行顺序:

  1. 当发生异常时,首先会检查当前方法中是否存在 try-catch 块来捕获该异常。如果存在适用的 catch 块,则会执行 catch 块中的代码,并且程序将继续执行 catch 块之后的代码。此时,全局异常处理器不会被触发。
  2. 如果当前方法中没有适用的 try-catch 块来捕获异常,或者异常在 try-catch 块中没有被捕获,则异常将被传递给调用该方法的上层调用栈。
  3. 如果异常一直传递到了最外层的调用栈,并且没有被任何 try-catch 块捕获,那么全局异常处理器将会被触发。

到了这里,关于springboot优雅处理异常的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 优雅地处理参数传递:Spring Boot中的技巧

    目录 一:四种传参方式 1.1:在 URL 中传递参数 1.2:PathVariable 传递参数(Restful 风格) 1.3:在请求体中传递参数 1.4:在请求头中传递参数  二:文件上传接口测试  2.1 : test.java  三、@RequestParam 3.1 多个参数  3.2 单个参数  四、@PathVariable 4.1  单个参数  4.2  多个参数 五、@

    2024年02月05日
    浏览(54)
  • 【规范】SpringBoot接口返回结果及异常统一处理,这样封装才优雅

    博友的需求就是我最大的动力 博友一说话,本狗笑哈哈。 博友要我写啥,我就写啥 。 特来一篇关于 SpringBoot接口返回结果及异常统一处理 ,虽说封不封装都能用,但咱后端也得给前端小姐姐留个好印象不是。项目前后端分离, 规范的数据传输格式,让REST风格的API具有简单

    2024年02月08日
    浏览(43)
  • 【Spring Boot】SpringBoot 优雅整合Swagger Api 自动生成文档

    Swagger 是一套 RESTful API 文档生成工具,可以方便地生成 API 文档并提供 API 调试页面。 而 Spring Boot 是一款非常优秀的 Java Web 开发框架,它可以非常方便地构建 Web 应用程序。 在本文中,我们将介绍如何使用 Swagger 以及如何在 Spring Boot 中整合 Swagger 。 首先,在 pom.xml 文件中添

    2023年04月22日
    浏览(49)
  • Spring Boot异常处理

            SpringBoot默认的处理异常的机制:SpringBoot 默认的已经提供了一套处理异常的机制。一旦程序中出现了异常 SpringBoot 会向/error 的 url 发送请求。在 springBoot 中提供了一个叫 BasicErrorController 来处理/error 请求,然后跳转到默认显示异常的页面来展示异常信息。 如 果我

    2024年01月17日
    浏览(94)
  • Spring Boot异常处理!!!

    SpringBoot默认的处理异常的机制:SpringBoot 默认的已经提供了一套处理异常的机制。一旦程序中出现了异常 SpringBoot 会向/error 的 url 发送请求。在 springBoot 中提供了一个叫 BasicErrorController 来处理/error 请求,然后跳转到默认显示异常的页面来展示异常信息 如 果我 们 需 要 将 所

    2024年01月20日
    浏览(39)
  • 记录spring boot 异常处理

    这个异常通常表示在映射文件中出现了重复的别名定义 命名规范:在定义别名时,建议采用一致的命名规范。例如,使用首字母大写的驼峰命名法或者全小写的下划线命名法,这样可以避免不同开发人员或团队在命名时产生冲突。 预留前缀:可以在别名前加上特定的前缀,

    2024年01月21日
    浏览(45)
  • Spring Boot异常处理和单元测试

    SpringBoot默认的处理异常的机制:SpringBoot 默认的已经提供了一套处理异常的机制。一旦程序中出现了异常 SpringBoot 会向/error 的 url 发送请求。在 springBoot 中提供了一个叫 BasicErrorController 来处理/error 请求,然后跳转到默认显示异常的页面来展示异常信息 如 果我 们 需 要 将 所

    2024年03月17日
    浏览(40)
  • Spring Boot异常处理及单元测试

    SpringBoot默认的处理异常的机制:SpringBoot 默认的已经提供了一套处理异常的机制。一旦程序中出现了异常 SpringBoot 会向/error 的 url 发送请求。在 springBoot 中提供了一个叫 BasicErrorController 来处理/error 请求,然后跳转到默认显示异常的页面来展示异常信息 如 果我 们 需 要 将 所

    2024年01月19日
    浏览(46)
  • Spring Boot实现统一异常处理的技术解析

    引言 在软件开发过程中,异常处理是非常重要的一环。一个好的异常处理机制可以帮助我们更好地定位问题,提高代码的可维护性和稳定性。Spring Boot作为一款轻量级的Java开发框架,提供了一种简单而高效的方式来实现统一异常处理。本文将详细介绍如何使用Spring Boot实现统

    2024年01月21日
    浏览(41)
  • Spring Boot 如何自定义异常处理器

    在Spring Boot应用程序中,异常处理是一个非常重要的方面。如果您不处理异常,应用程序可能会崩溃或出现不可预料的行为。默认情况下,Spring Boot将未捕获的异常返回给客户端。这通常不是期望的行为,因为客户端可能无法理解异常信息。在本文中,我们将介绍如何在Sprin

    2024年02月06日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包