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日

相关文章

  • 只需两步实现Eclipse+Maven快速构建第一个Spring Boot项目

    我会详细讲解“只需两步实现Eclipse+Maven快速构建第一个Spring Boot项目”的完整攻略,过程中会包含两条示例,供大家参考。 1. 新建Maven工程 打开Eclipse,选择File -> New -> Maven Project 在弹出的窗口中,选择archetype,并在Search框中输入“spring-boot”,选择最…

    Java 2023年5月19日
    00
  • Java IO之包装流详解

    Java IO之包装流详解 Java中的IO(输入输出)操作可以通过流(Stream)的形式进行。流分为节点流和处理流,其中处理流又称为包装流。本文主要介绍Java IO中的包装流,包括作用、示例和常见的包装流。 包装流的作用 包装流是对节点流的装饰,它包裹一个已有的节点流并且拥有同样的类型,但提供了更多的功能。包装流常常用于流的串联,通过多个处理流的组合可…

    Java 2023年5月26日
    00
  • Spring mvc工作原理_动力节点Java学院整理

    Spring MVC工作原理 Spring MVC是一种流行的 Java Web 应用程序开发框架,它基于模型-视图-控制器(MVC)设计模式来构建 Web 应用程序。其工作原理如下: 请求的处理流程 客户端向服务器发送HTTP请求,请求到达服务器后,首先到达前端控制器Front Controller。 Front Controller将请求传递给处理器处理…

    Java 2023年6月15日
    00
  • SpringBoot实现文件在线预览功能的全过程

    Spring Boot 实现文件在线预览功能的全过程 在本文中,我们将详细介绍如何使用 Spring Boot 实现文件在线预览功能。我们将介绍文件在线预览的概念、实现方式和提供两个示例。 文件在线预览概念 文件在线预览是指在 Web 应用程序中,用户可以直接在浏览器中预览文件,而不需要下载到本地再进行查看。常见的文件类型包括图片、PDF、Word、Exce…

    Java 2023年5月15日
    00
  • java8 LocalDate LocalDateTime等时间类用法实例分析

    Java8 时间类用法实例分析 Java8中引入了全新的日期和时间API,其中包括了多个专门用于处理日期和时间的类。本文将深入介绍几个常用的时间类及其用法实例。 1. LocalDate LocalDate 表示不带时区的日期,它的常用方法有: now():获取当前日期 getYear():获取当前日期的年份 getMonth():获取当前日期的月份 get…

    Java 2023年5月20日
    00
  • java实现银行管理系统

    Java实现银行管理系统攻略 1. 系统需求分析 在进行银行管理系统的开发前,我们需要对系统的需求进行分析。一般来说,银行管理系统需要包含以下功能模块: 用户管理:包括客户注册、登录、修改个人信息等功能。 账户管理:包括账户开户、查询余额、转账、存取款等功能。 交易管理:包括交易流水记录、账户冻结与解冻等功能。 系统管理:包括管理员登录、账号管理、数据备份等…

    Java 2023年5月19日
    00
  • 使用spring aop统一处理异常和打印日志方式

    使用Spring AOP是一种非常方便的方式,可以实现对异常和日志的统一处理。下面是使用Spring AOP实现统一处理异常和打印日志的完整攻略。 1. 异常处理 1.1 创建异常类 首先需要创建一个自定义异常类,例如: public class MyException extends RuntimeException { public MyExceptio…

    Java 2023年5月27日
    00
  • 详解Spring极速集成注解redis实录

    详解Spring极速集成注解redis实录 前言 本文主要介绍Spring如何快速集成redis并使用注解方式进行操作。本教程需要你具备基本的Spring MVC框架的了解和redis的使用知识。 正文 一、引入redis依赖 在Spring项目中引入下面的redis依赖: <dependency> <groupId>org.spri…

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