SpringBoot搭建全局异常拦截

一、概述

在使用Spring Boot开发Web应用的过程中,我们经常会遇到程序抛出异常的情况。如何优雅地处理这些异常,返回友好的错误信息给客户端,是很重要的一件事情。Spring Boot提供了全局异常处理机制,可以方便地实现统一的异常处理逻辑,减少代码重复,提高开发效率。

本文将介绍如何使用Spring Boot自带的全局异常处理机制,搭建一个通用的全局异常拦截器,并提供两个示例,演示如何处理业务异常和系统异常。

二、创建全局异常拦截器

  1. 创建异常处理类

在Spring Boot项目中创建一个异常处理类,用于捕获全局异常。可以继承Spring Boot提供的ResponseEntityExceptionHandler类,并重写handleExceptionInternal方法,自定义处理逻辑:

@ControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {

    @Override
    protected ResponseEntity<Object> handleExceptionInternal(Exception ex, Object body, HttpHeaders headers,
            HttpStatus status, WebRequest request) {

        String msg = ex.getMessage();
        if (StringUtils.isEmpty(msg)) {
            msg = "服务器异常,请联系管理员!";
        }

        Map<String, Object> result = new HashMap<>();
        result.put("code", status.value());
        result.put("msg", msg);

        return new ResponseEntity<>(result, status);
    }
}
  1. 自定义异常

在项目中定义一个自定义异常,用于抛出业务异常。需要继承RuntimeException类,并在构造方法中传入异常信息:

public class BusinessException extends RuntimeException {

    public BusinessException(String msg) {
        super(msg);
    }
}
  1. 抛出业务异常

在业务代码中抛出自定义异常:

public class UserService {

    public User getById(int id) {
        User user = userRepository.findOne(id);
        if (user == null) {
            throw new BusinessException("用户不存在!");
        }
        return user;
    }
}
  1. 抛出系统异常

在业务代码中抛出系统异常:

public class UserService {

    public void deleteById(int id) {
        int result = userRepository.delete(id);
        if (result == 0) {
            throw new RuntimeException("删除用户失败!");
        }
    }
}

三、运行示例代码

  1. 处理业务异常

使用Spring Boot提供的RestController注解创建一个测试接口:

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/{id}")
    public User getById(@PathVariable int id) {
        return userService.getById(id);
    }
}

在访问/user/1时,由于id为1的用户不存在,会抛出自定义的业务异常。全局异常拦截器会捕获并处理该异常,返回以下JSON数据:

{
    "code": 500,
    "msg": "用户不存在!"
}
  1. 处理系统异常

创建另一个测试接口:

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @DeleteMapping("/{id}")
    public String deleteById(@PathVariable int id) {
        userService.deleteById(id);
        return "删除成功!";
    }
}

在访问/user/1时,由于id为1的用户不存在,会抛出系统异常。全局异常拦截器会捕获并处理该异常,返回以下JSON数据:

{
    "code": 500,
    "msg": "删除用户失败!"
}

以上就是使用Spring Boot搭建全局异常拦截的完整攻略。通过自定义异常和全局异常拦截器,我们可以更加优雅地处理程序中出现的各种异常情况,提升应用的健壮性和可维护性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot搭建全局异常拦截 - Python技术站

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

相关文章

  • Java 输入多行字符串或者多个int数值的方法

    要输入多行字符串或者多个int数值,可以使用Java的Scanner类。Scanner类可以通过System.in从键盘获取输入,也可以从文件、字符串等中获取输入。 输入多行字符串 如果需要输入多行字符串,可以使用Scanner类的nextLine()方法。为了避免输入时出现死循环,可以在输入的第一行加入一个数字,表示接下来要输入几行字符串。 下面是一个输入…

    Java 2023年5月26日
    00
  • java.lang.Runtime.exec() Payload知识点详解

    下面我将详细讲解一下“java.lang.Runtime.exec() Payload知识点详解”的完整攻略。 什么是java.lang.Runtime.exec() Payload? java.lang.Runtime.exec()是Java语言中一个可以执行外部命令的方法。正常使用该方法可以很方便地执行各种系统命令,功能非常强大。但是,当我们在执行该方法…

    Java 2023年5月20日
    00
  • Maven 配置文件 生命周期 常用命令详解

    Maven 配置文件 Maven 是一款基于项目对象模型 (POM) 的构建工具,POM 是 Maven 工作的核心,其中包括了项目依赖、插件配置、构建目标等信息。Maven 配置文件主要分为以下两类: settings.xml settings.xml 文件是 Maven 的全局配置文件,位于 Maven 安装目录的 conf 目录下,主要包括了 Mave…

    Java 2023年5月20日
    00
  • asp.net内置对象 Response对象使用介绍

    ASP.NET是一个基于.NET Framework的Web应用程序开发框架。在ASP.NET的开发过程中,Response对象是一个非常重要的内置对象,它提供了很多方法和属性来管理HTTP响应。本文将介绍如何利用Response对象来控制HTTP响应的内容和属性。 Response对象的作用 在ASP.NET的Web应用程序中,Response对象用于向客…

    Java 2023年5月19日
    00
  • 在Flash中实现物体运动的三种方法介绍(AS)

    当使用Flash软件制作动画或游戏时,需要使用一些方法来实现物体的运动效果。在ActionScript编程中,也可以使用一些代码来实现物体的移动,以下是三种常用的方法: 一、基于坐标移动 这种方法是指直接修改物体的坐标值,实现物体的移动。以AS3为例,在代码中可以使用如下方法: object.x = object.x + 10; // 将物体沿着 x 轴正方…

    Java 2023年6月15日
    00
  • Java微信公众号开发之通过微信公众号获取用户信息

    Java微信公众号开发之通过微信公众号获取用户信息 简介 本文将详细讲解如何通过Java实现微信公众号获取用户信息细节,包括获取用户基本信息和获取关注者列表,最后提供两条常用的示例说明。 准备工作 在开始获取用户信息之前,你需要进行以下步骤的准备工作: 注册微信公众号,并获取关注者OpenID和Access Token. 创建Java Web服务器,并引入相…

    Java 2023年5月26日
    00
  • 详解Java如何实现自定义注解

    下面我将为您详细讲解“详解Java如何实现自定义注解”的完整攻略。 什么是自定义注解 在 Java 编程中,注解是一种非常强大且常用的功能,用于给代码添加元数据。同时,Java 也给开发人员提供了自定义注解的机制,可以让我们更加灵活的使用注解。 自定义注解是一种以 @interface 关键字来定义的抽象注解类型,可以使用元注解来修饰自定义注解。相比于内置注…

    Java 2023年5月26日
    00
  • SpringBoot安全认证Security的实现方法

    下面是Spring Boot安全认证Security的实现方法的完整攻略。 1. Spring Security简介 Spring Security是基于Spring框架的安全认证框架,在Spring Boot项目中可以很方便地实现用户身份认证和授权管理。 Spring Security提供了一个功能强大且灵活的框架,能够应对绝大多数的安全需求。它提供了许多…

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