详解如何在SpringBoot项目中使用全局异常处理

下面我将介绍如何在Spring Boot项目中使用全局异常处理。

什么是全局异常处理

Spring Boot提供了全局异常处理机制,可以自定义异常处理,将异常统一处理。当系统中出现异常时,通过该全局异常处理机制,可以统一的返回异常信息,避免因为异常没有处理而导致系统崩溃等问题。

如何自定义全局异常处理

  1. 先创建一个自定义异常类,让其继承RuntimeException或其子类,例如:
public class NotFoundException extends RuntimeException {
    private final String code;
    private final String message;

    public NotFoundException(String code, String message) {
        this.code = code;
        this.message = message;
    }

    public String getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }
}
  1. 创建全局异常处理器类,可以使用@ControllerAdvice注解标注,具体代码如下:
@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public ErrorResponse handleException(Exception ex) {
        ErrorResponse errorResponse = new ErrorResponse();
        errorResponse.setCode("500");
        errorResponse.setMessage(ex.getMessage());
        return errorResponse;
    }
}

在该类中,我们使用了@ControllerAdvice注解标注该类,告诉Spring Boot该类为全局异常处理器,使用@ExceptionHandler注解对异常进行处理,@ResponseBody注解用于返回JSON格式的数据。

  1. 创建一个DTO类,用于封装错误信息:
public class ErrorResponse {
    private String code;
    private String message;
    //getter/setter
}
  1. 通过上述步骤,我们已经可以实现全局异常处理器的功能。在业务代码中,当出现需要处理的异常时,抛出自定义异常即可:
@GetMapping("/user/{id}")
public User getUserById(@PathVariable String id) {
    Optional<User> user = userRepository.findById(id);
    if (user.isPresent()) {
        return user.get();
    }
    throw new NotFoundException("404","用户不存在");
}

在上述代码中,当id对应的用户不存在时,我们抛出了自定义的NotFoundException异常。

至此,我们已经实现了全局异常处理器在项目中的应用。当出现任何未处理的异常时,都会被该处理器接管,并返回JSON格式的错误信息。

下面再给出一个示例:

@PostMapping("/user")
public User addUser(@RequestBody User user) {
    if (StringUtils.isEmpty(user.getName())) {
        throw new BadRequestException("400","用户姓名不能为空");
    }
    if (StringUtils.isEmpty(user.getPhone())) {
        throw new BadRequestException("400","用户手机号不能为空");
    }
    return userRepository.save(user);
}

在该示例中,当用户的姓名或手机号为空时,我们也抛出了自定义的BadRequestException异常,该异常同样会在全局异常处理器中进行处理。

总结

全局异常处理是Spring Boot中非常重要的机制,它可以使我们的代码更加健壮,避免因为未处理异常而导致系统崩溃等问题。全局异常处理器的实现非常简单,只需要使用@ControllerAdvice注解标注一个类即可。在正式使用时,我们只需要在业务代码中抛出自定义异常,全局异常处理器会统一处理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解如何在SpringBoot项目中使用全局异常处理 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • Maven Repository仓库的具体使用

    我来为您详细讲解 Maven Repository 仓库的使用攻略。 什么是 Maven Repository Maven Repository(Maven 仓库)是 Maven 使用的一个非常重要的概念。在 Maven 中,一个项目的构建过程中需要用到各种依赖(如 Jar 包、第三方库等),而这些依赖通常可以从 Maven 仓库中获取。Maven 仓库是存…

    Java 2023年5月20日
    00
  • Java自动化工具Ant的基础使用教程

    Java自动化工具Ant的基础使用教程 简介 Ant(Another Neat Tool)是一个基于Java开发的构建工具,它是基于脚本的、可扩展的构建系统。Ant通过XML文件来进行构建,而无需使用特定的编程语言来编写构建逻辑。Ant可以自动编译Java代码,运行Junit测试,生成Java文档等。 基础使用 安装 下载Ant安装程序,官方下载地址为:ht…

    Java 2023年5月26日
    00
  • Eclipse+Webservice简单开发实例

    Eclipse是一款为Java开发者设计的集成开发环境,Webservice是一种基于Web的分布式技术,实现了通过网络进行异构系统之间的通讯和集成。结合Eclipse和Webservice,可以轻松开发出高效、安全、可靠的分布式应用程序。本攻略将介绍如何在Eclipse中使用Webservice进行简单开发,并提供两个示例说明,帮助读者深入了解这项技术。 …

    Java 2023年6月15日
    00
  • java操作mysql入门代码实例(含插入、更新和查询)

    首先简述一下本文所讲解的内容。本文将会讲述Java操作MySQL中的增删改查基础操作,主要通过JDBC连接MySQL数据库,并通过代码实现简单的增删改查。 文章结构如下: 准备工作 连接数据库 插入数据 修改数据 查询数据 关闭连接 1. 准备工作 在开始编写Java操作MySQL入门代码实例前,需要以下准备工作: 安装MySQL数据库并创建一个新的数据库;…

    Java 2023年5月19日
    00
  • Java中System.currentTimeMillis()计算方式与时间单位转换讲解

    下面是Java中System.currentTimeMillis()计算方式与时间单位转换讲解的完整攻略。 1. System.currentTimeMillis()计算方式 在Java中,我们可以通过System.currentTimeMillis()方法获取当前的毫秒数,这个毫秒数表示从1970年1月1日00:00:00 GMT起到现在的时间间隔。 这个…

    Java 2023年5月20日
    00
  • java自带命令行工具jmap、jhat与jinfo的使用实例代码详解

    Java自带命令行工具攻略 Java自带了多个命令行工具,可以对Java程序进行分析、调试和监控。其中,jmap、jhat和jinfo是非常重要的工具。本攻略将详细讲解它们的使用,包括实例代码和示例结果。 jmap jmap是Java Memory Map的缩写,是一个用于打印Java进程中内存使用情况的命令行工具。下面是jmap的常用选项: Usage: …

    Java 2023年5月19日
    00
  • Java中StringBuilder类的介绍与常用方法

    关于Java中StringBuilder类的介绍与常用方法,我为你准备了以下攻略: StringBuilder类的介绍 StringBuilder是在JDK 1.5中引入的一个新类,用于代替StringBuffer。与StringBuffer类似,StringBuilder也被设计成可变的字符串类,在字符串频繁修改的情况下,使用StringBuilder比使…

    Java 2023年5月27日
    00
  • 深入理解Java泛型、协变逆变、泛型通配符、自限定

    禁止转载 重写了之前博客写的泛型相关内容,全部整合到这一篇文章里了,把坑都填了,后续不再纠结这些问题了。本文深度总结了函数式思想、泛型对在Java中的应用,解答了许多比较难的问题。 纯函数 协变 逆变 泛型通配符 PECS法则 自限定 Part 1: 协变与逆变 Java8 引入了函数式接口,从此方法传参可以传递函数了,有人说这是语法糖。 实际上,这是编程范…

    Java 2023年4月22日
    00
合作推广
合作推广
分享本页
返回顶部