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 Boot环境属性占位符解析及类型转换详解

    Spring Boot环境属性占位符解析及类型转换详解 在Spring Boot应用程序中,我们可以使用环境属性占位符来引用应用程序的配置属性。环境属性占位符是以${}的形式出现的,其中包含了一个属性名,例如${server.port}。在本文中,我们将详细介绍Spring Boot环境属性占位符的解析和类型转换。 1. 环境属性占位符解析 Spring B…

    Java 2023年5月18日
    00
  • 详解Java的Hibernate框架中的缓存与二级缓存

    详解Java的Hibernate框架中的缓存与二级缓存攻略 本攻略旨在详细讲解Java的Hibernate框架中的缓存与二级缓存,帮助读者了解Hibernate框架中的缓存机制和优化方式。 什么是Hibernate框架中的缓存? Hibernate框架中的缓存是指在应用程序与数据库之间的缓存层,即程序与数据库之间的缓存层,它能够在应用程序与数据库之间减少交互…

    Java 2023年5月20日
    00
  • 详解Java如何获取文件编码格式

    下面是详解Java如何获取文件编码格式的完整攻略。 什么是文件编码格式? 文件编码格式是指用于存储或传输文本数据的编码方式,常见的编码方式有UTF-8、GBK、GB2312等。因为不同的编码方式会使用不同的字符集将文本编码为二进制数据,所以在读取文本文件时需要了解文件的编码方式,才能正确地将二进制数据转换为文本数据。 Java如何获取文件编码格式 第一种方法…

    Java 2023年5月19日
    00
  • c#实现根据网络IP显示地理位置功能示例

    C#实现根据网络IP显示地理位置功能攻略 什么是IP地址 IP地址是Internet Protocol Address(英语,直译为“网际协议地址”)的缩写,是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。 IP地址在Internet中用作唯一标识因特网上的设备。 根据IP地址显示地理位置 …

    Java 2023年5月19日
    00
  • Mybatis使用MySQL模糊查询时输入中文检索不到结果怎么办

    为了解决”Mybatis使用MySQL模糊查询时输入中文检索不到结果”的问题,我们需要在Mybatis配置文件中进行一些特定的设置。 1.在Mybatis的配置文件中添加如下代码: <configuration> <settings> <setting name="jdbcTypeForNull" value…

    Java 2023年6月1日
    00
  • java获取一个文本文件的编码(格式)信息

    获取一个文本文件的编码(格式)信息可以通过以下步骤进行: 读取文件的前几个字节,获取文件头信息。 根据文件头信息推测文件的编码格式。 具体操作如下: 读取文件头信息 try (InputStream inputStream = new FileInputStream(file)) { byte[] bytes = new byte[3]; inputStre…

    Java 2023年5月19日
    00
  • Java计算字符串公式的方式解读

    下面是Java计算字符串公式的方式解读: 1. 了解逆波兰表达式 在计算字符串公式之前,需要了解逆波兰表达式。逆波兰表达式是一种将数学表达式中的运算符放在操作数的后面进行计算的形式。 例如,中缀表达式(即常见的数学公式)5 + 3 * 2 – 6可以转换为逆波兰表达式:5 3 2 * + 6 – 在逆波兰表达式中,操作数在前面,运算符在后面,便于计算时进行栈…

    Java 2023年5月26日
    00
  • Java的Hello World详解

    Java的Hello World详解 简介 Hello World是学习任何编程语言的第一步,也是最基本的程序代码。在Java语言中,Hello World程序是Java学习者入门的必修课程。 安装Java环境 在开始编写Java程序之前,需要先安装Java编程环境。可以从Oracle官网下载并安装JDK(Java Development Kit)。安装过程…

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