详解如何在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日

相关文章

  • Springboot中整合knife4j接口文档的过程详解

    下面是详细讲解“Springboot中整合Knife4j接口文档的过程详解”的完整攻略。 1. 什么是Knife4j Knife4j是一款基于SpringBoot的开源接口文档生成工具,可以快速生成美观、易读的API文档。与其他文档工具不同的是,Knife4j通过注解来自动生成接口文档,无需手动编写文档说明,大大提高了接口文档的编写效率。 2. 整合Knif…

    Java 2023年5月19日
    00
  • SpringBoot2.3新特性优雅停机详解

    SpringBoot2.3新特性优雅停机详解 简介 在以往的项目中,我们在正常停止服务时,往往都是使用kill的方式来停止,这种方式虽然简单,但是可能会导致一些问题,比如程序被强制关闭时,可能会导致正在处理的请求直接中断等问题。SpringBoot2.3中新增了一个优雅停机的功能,可以让我们在停止服务时,更加安全和优雅。 优雅停机的原理 在之前的Spring…

    Java 2023年5月15日
    00
  • 由浅入深快速掌握Java 数组的使用

    一、前言 Java数组是一种非常常用的数据结构,用于存储相同类型数据的集合。熟练掌握数组的使用对Java开发非常重要。本文将从浅入深,逐步介绍Java数组的基本概念,创建和初始化数组,访问数组元素,以及数组的遍历和排序等内容。 二、什么是Java数组 Java数组是存储同一数据类型的固定大小的顺序集合。它是由相同数据类型的元素构成的,这些元素可以通过索引进行…

    Java 2023年5月26日
    00
  • SpringBoot2零基础到精通之profile功能与自定义starter

    SpringBoot2零基础到精通之profile功能与自定义starter 本文将详细讲解SpringBoot2中的profile功能和自定义starter,在文章中会通过两个实例来演示,帮助读者更好地理解。 profile功能 什么是profile Profile是SpringBoot提供的一个在不同环境下使用不同配置的功能。比如在开发环境中使用开发配置…

    Java 2023年5月19日
    00
  • 浅谈java中math类中三种取整函数的区别

    下面是我对题目“浅谈java中math类中三种取整函数的区别”的详细攻略: 1. 引言 Java中的Math类提供了很多用于数值计算的方法。本文将重点讲解Math类中的三种取整函数的区别:round、ceil和floor。这三个函数的共同点是,它们都返回近似值且返回类型为整数。它们的不同之处将在下文中进行详细比较。 2. Math类中的三种取整函数 2.1 …

    Java 2023年5月26日
    00
  • Java–SSH,SSM和Spring Boot框架区别及优缺点说明

    Java中的SSH、SSM和Spring Boot框架都是常用的Web开发框架,它们各自有着不同的优缺点和适用场景。以下是Java中SSH、SSM和Spring Boot框架的区别及优缺点说明的完整攻略: SSH框架 SSH框架是指Struts2 + Spring + Hibernate框架的组合。它是Java Web开发中最常用的框架之一,具有以下优点: …

    Java 2023年5月15日
    00
  • Maven下载和配置环境教程

    Maven下载和配置环境教程 Maven是一款十分流行的项目管理和构建工具,通过引入依赖的方式将项目工程带入到一个统一管理的框架之中。下面是Maven下载和配置环境的攻略。 下载Maven Maven的官方网站为:http://maven.apache.org/,打开网页后可以选择下载最新版的Maven,也可以选择下载历史版本。可以根据自己的需要进行下载。下…

    Java 2023年5月20日
    00
  • Java日常练习题,每天进步一点点(5)

    下面是对于Java日常练习题系列的完整攻略。 标题 本文内容为Java日常练习题第5部分的攻略,旨在帮助Java初学者通过每天练习,逐步提高自己的编程能力。 练习题 本部分共包含5个Java练习题,涉及基本数据类型、数组、字符串等内容。每个练习题建议练习时间不超过30分钟。 提交作业 完成每个练习题后,建议将代码提交到代码托管平台(如GitHub、GitLa…

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