SpringBoot全局异常捕获处理实现方案

 更新时间:2024年02月10日 10:24:13   作者:RobinCode  
这篇文章主要详细介绍了SpringBoot全局异常捕获处理实现方案,文章通过代码示例给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下

在Spring Boot中实现全局异常处理可以通过以下方式:

  • 使用@ControllerAdvice注释创建一个全局异常处理类,并使用@ExceptionHandler注释来定义具体异常的处理方法。
import your.package.IllegalNumberException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @class GlobalExceptionHeadler
 * @date 2021/8/28 13:41
 */
@ControllerAdvice
public class GlobalExceptionHeadler {

    //处理指定异常
    @ExceptionHandler(value = IllegalNumberException.class)//IllegalNumberException 自定义异常
    @ResponseBody
    public ResponseEntity<String> illegalNumberExceptionHeadler(Exception e){
        System.out.println("进入非法参数异常处理");
        return new ResponseEntity<>(e.getMessage(),HttpStatus.INTERNAL_SERVER_ERROR);
    }

    //处理exceptioin子类异常
    @ExceptionHandler(value = Exception.class)//作用方法上,作用:用来处理指定异常; value属性:用来处理指定类型的异常
    @ResponseBody
    public ResponseEntity<String> exceptionHeadler(Exception e){
        //if(e instanceof IllegalNumberException){} 等价于 上面的方法处理指定异常
        System.out.println("进入自定义异常处理");
        return new ResponseEntity<>(e.getMessage(),HttpStatus.INTERNAL_SERVER_ERROR);
    }
}
  • 自定义异常
/**
 * @class IllegalNumberException
 * @date 2021/8/28 14:05
 */
public class IllegalNumberException extends RuntimeException{
    public IllegalNumberException(String message){
        super(message);
    }
}
  • Controller
import your.package.IllegalNumberException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Slf4j
public class Test2Controller {
    

    @GetMapping("/testException")
    public ResponseEntity<String> demo(){
        int i = 1/0;
        return new ResponseEntity<>("ok", HttpStatus.OK);
    }

    @GetMapping("/testIllegalNumberException/{id}")
    public ResponseEntity<String> demo(@PathVariable("id") Integer id){
        if(id < 0){
            throw new IllegalNumberException("无效id,请检查");
        }
        return new ResponseEntity<>("ok", HttpStatus.OK);
    }


}
  • Postman测试效果

通用异常:

自定义异常:

 总结

在以上代码片段中,使用了 @ExceptionHandler 注解来指定该方法会处理哪种类型的异常。方法体中,你可以自定义返回给用户的响应,包括HTTP状态码和返回信息。使用 @ControllerAdvice 注解可以确保它会接收到由控制器抛出的异常。

如果需要更多具体的自定义设置,还可以在响应里添加 headers 信息,或者创建更复杂的响应体,例如使用ResponseEntity。官方的 Spring 框架文档提供了和这个主题相关的更多高级选项和最佳实践指南。

以上就是SpringBoot全局异常捕获处理实现方案的详细内容,更多关于SpringBoot全局异常捕获处理的资料请关注脚本之家其它相关文章!

相关文章

  • 关于Java中的继承和组合的一个错误使用的例子

    关于Java中的继承和组合的一个错误使用的例子

    这篇文章主要介绍了关于Java中的继承和组合的一个错误使用的例子,需要的朋友可以参考下
    2016-08-08
  • 解决springboot 启动找不到主类的问题

    解决springboot 启动找不到主类的问题

    这篇文章主要介绍了解决springboot 启动找不到主类的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • spring自定义一个简单的Starter启动器

    spring自定义一个简单的Starter启动器

    这篇文章主要介绍了spring自定义一个简单的Starter启动器,一个 starter其实就是对一个功能的集成封装,然后对外提供一个依赖,让业务去使用,像我们熟悉的 Redis,mongo,mybatis 等均属于,需要的朋友可以参考下
    2023-07-07
  • Java Fluent Mybatis 分页查询与sql日志输出详解流程篇

    Java Fluent Mybatis 分页查询与sql日志输出详解流程篇

    Java中常用的ORM框架主要是mybatis, hibernate, JPA等框架。国内又以Mybatis用的多,基于mybatis上的增强框架,又有mybatis plus和TK mybatis等。今天我们介绍一个新的mybatis增强框架 fluent mybatis关于分页查询、sql日志输出流程
    2021-10-10
  • Spring Boot + Kotlin整合MyBatis的方法教程

    Spring Boot + Kotlin整合MyBatis的方法教程

    前几天由于工作需要,便开始学习了kotlin,java基础扎实学起来也还算比较快,对于kotlin这个编程语言自然是比java有趣一些,下面这篇文章主要给大家介绍了关于Spring Boot + Kotlin整合MyBatis的方法教程,需要的朋友可以参考下。
    2018-01-01
  • 使用maven-assembly-plugin如何将system 依赖范围的jar以class 方式打包进 jar包中

    使用maven-assembly-plugin如何将system 依赖范围的jar以class 方式

    这篇文章主要介绍了使用maven-assembly-plugin如何将system 依赖范围的jar以class 方式打包进 jar包中,本文给大家分享完美解决思路,结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • springmvc重定向实现方法解析

    springmvc重定向实现方法解析

    这篇文章主要介绍了springmvc重定向实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Java的NIO与IO的详解及对比

    Java的NIO与IO的详解及对比

    这篇文章主要介绍了Java的NIO与IO的详解及对比的相关资料,需要的朋友可以参考下
    2017-03-03
  • Java实现Dijkstra算法的示例代码

    Java实现Dijkstra算法的示例代码

    Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。本文主要介绍了实现这一算法的Java代码,需要的可以参考一下
    2022-07-07
  • IDEA连接mysql保姆级教学教程

    IDEA连接mysql保姆级教学教程

    学习使用IDEA的时候,需要连接Database,下面这篇文章主要给大家介绍了关于IDEA连接mysql的保姆级教学教程,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-03-03

最新评论