SpringBoot学习之全局异常处理设置(返回JSON)

下面是关于“SpringBoot学习之全局异常处理设置(返回JSON)”的完整攻略。

一、背景

在实际开发中,经常因为代码中潜在的异常、业务异常等原因导致程序崩溃或返回异常信息。为了更好地保护程序的健壮性,我们通常会设置全局异常处理器,统一处理这些异常信息,并返回统一的异常信息给客户端。本文主要讲解如何在SpringBoot项目中配置全局异常处理器并返回JSON格式的异常信息。

二、实现步骤

1. 异常处理器类的创建

首先,我们需要新建一个异常处理器类,该类需要实现SpringBoot提供的ExceptionHandler接口并重写handleException方法。例如:

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    public ResultVo handleException(Exception e) {
        return ResultVo.error(e.getMessage());
    }

}

接下来,我们详细讲解一下上述代码中的几个关键点:

  • @RestControllerAdvice 注解的作用是让 Spring 在所有 Controller 中抛出的异常都经过这个异常处理器的处理,并且每一次抛出异常都会生成一个 JSON 格式的字符串返回给客户端。

  • @ExceptionHandler(Exception.class) 注解标识需要处理的异常类型,这里我们选择处理所有类型的异常。你也可以针对不同类型的异常编写不同的异常处理方式。

  • ResultVo 是自定义的一个用于返回数据的 Vo 类,可以在其中封装错误码、错误信息等内容,以便于客户端更好地处理异常信息。

  • 在这个方法中,我们通过调用 Exception 对象的 getMessage() 方法获取异常信息,并封装到 ResultVo 中进行返回。

2. ResultVo类的创建

ResultVo类是自定义的公共类,用于封装返回统一的JSON格式的数据。例如:

public class ResultVo<T> {

    /**
     * 错误码
     */
    private Integer code;

    /**
     * 错误信息
     */
    private String msg;

    /**
     * 返回的具体内容
     */
    private T data;

    ... getter 和 setter 方法 ...

    public static <T> ResultVo<T> success() {
        return new ResultVo<T>();
    }

    public static <T> ResultVo<T> success(T t) {
        ResultVo<T> resultVo = new ResultVo<T>();
        resultVo.setData(t);
        return resultVo;
    }

    public static <T> ResultVo<T> error(Integer code, String msg) {
        ResultVo<T> resultVo = new ResultVo<T>();
        resultVo.setCode(code);
        resultVo.setMsg(msg);
        return resultVo;
    }

    public static <T> ResultVo<T> error(String errorMessage){
        ResultVo<T> resultVo = new ResultVo<T>();
        resultVo.setCode(ResultEnum.ERROR.getCode());
        resultVo.setMsg(errorMessage);
        return resultVo;
    }

}

在这个类中,我们定义了code、msg、data等属性,并提供了相应的构造方法和静态方法来创建ResultVo对象。其中,code表示错误码,msg表示错误信息,data表示返回的具体内容。我们可以根据自己的需求来封装ResultVo的构造函数、get和set方法。

3. 异常测试

现在,我们已经配置好了全局异常处理器和返回统一的JSON格式数据的类。接下来,进行测试:

@RestController
public class ExceptionController {

    @GetMapping("/exception")
    public String testException() {
        int i = 1 / 0;
        return "success";
    }
}

这里我们编写了一个异常测试的接口,其中的1/0代码会抛出一个ArithmeticException异常。接口的返回值为success,但是由于产生了异常,系统会返回如下JSON格式的数据:

{
    "code": 500,
    "msg": "/ by zero"
}

这说明我们配置的全局异常处理器已经生效,并且能够捕获和处理任何类型的异常,并返回统一格式的JSON格式数据。

三、总结

通过本文的介绍,我们基本完成了SpringBoot项目中全局异常处理器的配置,并返回了JSON格式的数据。全局异常处理器作为一个重要的保障,能够保障系统的健壮性,减小程序崩溃的风险,提高系统的用户体验。和此类相关的内容还包括自定义异常、异常日志打印等,部分示例如下:

/**
 * 自定义异常
 */
public class SystemException extends RuntimeException{
    private Integer errorCode;
    private String errorMsg;

    public SystemException(Integer errorCode, String errorMsg) {
        this.errorCode = errorCode;
        this.errorMsg = errorMsg;
    }

    public Integer getErrorCode() {
        return errorCode;
    }

    public String getErrorMsg() {
        return errorMsg;
    }
}

/**
 * 捕获自定义异常
 */
@RestControllerAdvice
public class GlobalExceptionHandler{

    @ExceptionHandler(SystemException.class)
    public ResultVo handleSystemException(SystemException xe){
        return ResultVo.error(xe.getErrorCode(),xe.getErrorMsg());
    }
}


@RestController
@Slf4j
public class LogPrintController {

    @GetMapping("/log")
    public void testLog(){
        log.info("这是info级别log");
        log.warn("这是warn级别log");
        log.error("这是error级别log");
    }
}

以上就是本文的全部内容了,希望能够对大家的项目开发有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot学习之全局异常处理设置(返回JSON) - Python技术站

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

相关文章

  • Spring Batch 入门示例

    下面详细讲解Spring Batch入门示例的完整攻略,内容包括: Spring Batch 简介 Spring Batch 入门示例概述 示例1:批处理读取 CSV 文件并输出到控制台 示例2:批处理读取数据库中的数据并写入到 XML 文件中 Spring Batch 简介 Spring Batch 是一个高效、强大、可重用的批处理框架,能够处理海量的数据…

    Java 2023年6月3日
    00
  • SpringMvc框架的简介与执行流程详解

    以下是关于“SpringMVC框架的简介与执行流程详解”的完整攻略,其中包含两个示例。 1. 前言 SpringMVC是一种常用的Java Web开发框架,它基于MVC(Model-View-Controller)模式,将Web应用程序分为三个部分:模型、视图和控制器。本攻略将详细讲解SpringMVC框架的简介和执行流程。 2. 简介 SpringMVC框…

    Java 2023年5月16日
    00
  • Java使用JDBC连接数据库的实现方法

    下面是详细讲解“Java使用JDBC连接数据库的实现方法”的完整攻略。 JDBC简介 Java数据库连接(Java Database Connectivity,JDBC)是Java语言中用于规范客户端程序如何访问数据库的应用程序接口,提供了诸如查询和更新数据库记录的方法。 JDBC是基于面向对象设计思想的接口,它是Java访问数据库的标准方式,使得Java程…

    Java 2023年6月16日
    00
  • 学习Java之如何正确地跳出循环结构

    学习Java,循环结构是非常重要的知识点。而在使用循环的过程中,我们有时候需要跳出循环,以停止或跳过一些迭代,这时候就需要使用跳出循环的语句。本文将详细讲解如何正确地跳出循环结构。 标准循环结构 Java 中常见的循环结构包括 for、while 和 do-while 循环结构。它们的语法分别为: for (初始化; 布尔表达式; 更新) { // 代码块 …

    Java 2023年5月26日
    00
  • Java搜索与图论之DFS和BFS算法详解

    Java搜索与图论之DFS和BFS算法详解 DFS算法基本原理 DFS(深度优先搜索)指的是从图的某个顶点出发,访问其所有能到达的顶点,并且尽可能深的搜索其中一支支路径的搜索算法。遍历过的点存放到形成的树中。树中每个结点的祖先结点都位于它的所有子树中,它的祖先结点包括它父亲结点和它父亲的祖先结点。DFS一般采用递归或者栈实现,其算法流程如下: 访问起始顶点 …

    Java 2023年5月19日
    00
  • Spring使用Setter完成依赖注入方式

    Spring使用Setter完成依赖注入方式的完整攻略 什么是依赖注入 依赖注入(Dependency Injection,简称DI)是一种编程思想,它将一个对象所依赖的其他对象交给容器在运行期间动态地注入。这样可以消除类与类之间的耦合,降低代码的复杂度,提高代码的可维护性和可复用性。 Spring框架中使用依赖注入来管理对象之间的依赖关系,开发者只需要负责…

    Java 2023年5月27日
    00
  • Java中一个线程执行死循环有什么后果

    下面我将详细讲解Java中一个线程执行死循环可能会带来的后果。 为什么不建议在线程中使用死循环? 1. 占用大量CPU资源 一个线程执行死循环的话,会导致该线程一直处于计算状态,一直会占用CPU资源,导致CPU负载非常高。如果程序中存在很多这样的线程,那么整个系统的性能就会下降。 例如下面的代码,一旦启动该线程后,就会一直循环,从而导致CPU占用极高: pu…

    Java 2023年5月19日
    00
  • tomcat优化配置小结

    Tomcat优化配置小结 Tomcat作为目前应用广泛的Java Web服务器,其性能和稳定性一直备受关注。本文主要介绍如何通过优化Tomcat的配置来提升其性能,使得其更加适用于高负载环境。 1. 调整JVM参数 Tomcat使用JVM来运行Java Web应用程序,JVM的默认参数不一定适合所有应用。通过修改JVM参数,可以提高Java应用的性能和稳定性…

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