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学习之@SessionAttributes实例解析

    Spring学习之@SessionAttributes实例解析 简介 在Spring中,@SessionAttributes注解用于将模型属性存储在HTTP会话中。Spring会话中的模型属性是Web应用程序中处理流程和视图渲染的重要组成部分。本文将介绍@SessionAttributes注解的使用方法,并提供两个示例说明。 @SessionAttribut…

    Java 2023年6月15日
    00
  • Java初学者问题图解(动力节点Java学院整理)

    对于“Java初学者问题图解(动力节点Java学院整理)”这个主题,我可以提供以下完整攻略: Java初学者问题图解 前言 Java作为一门广受欢迎的编程语言,吸引了许多初学者,但在学习过程中难免会遇到问题。本文就对Java学习过程中常见的问题进行了整理,并提供了图解和解决方法。 字符串问题 1. 字符串比较 问题描述:如何比较两个字符串是否相等? 问题分析…

    Java 2023年5月25日
    00
  • Maven pom.xml与settings.xml详解

    Maven是一个流行的Java构建工具,是基于项目对象模型(Project Object Model, POM)进行构建的。POM是一个XML文件,描述了项目的依赖关系、构建环境、代码目录、打包、部署等信息。POM通过继承机制实现了依赖管理和构建配置的复用,是Maven强大的特性之一。而settings.xml是Maven的配置文件,它包含了Maven的配置…

    Java 2023年5月20日
    00
  • java表单提交中文乱码的解决方法

    针对Java表单提交中文乱码的解决方法,我们可以从服务器和浏览器两个方面入手,以下是完整的攻略: 一、服务器端解决方案 1.1 设置请求编码与响应编码 在服务器端,我们可以通过设置请求编码和响应编码来解决Java表单提交中文乱码问题。 request.setCharacterEncoding("UTF-8"); response.setC…

    Java 2023年5月20日
    00
  • mybatis-plus与mybatis共存的实现

    要实现MyBatis-Plus与MyBatis的共存,需要注意一些配置和使用方式方面的细节。下面是实现步骤的详细攻略: 引入MyBatis-Plus和MyBatis的依赖包。在pom.xml中添加以下依赖: “`xml com.baomidou mybatis-plus-boot-starter 最新版本 org.mybatis.spring.boot m…

    Java 2023年5月20日
    00
  • 如何把springboot jar项目 改为war项目

    首先需要了解的是,Spring Boot默认创建的是JAR项目,JAR包是一种Java的打包格式,跟普通的ZIP包大同小异。而WAR包是Java Web的打包格式。 将Spring Boot jar项目转为war项目,主要需要以下步骤: 1. 修改pom.xml文件 在Spring Boot的Maven项目中,需要在pom.xml文件中添加Web依赖和打包方…

    Java 2023年5月28日
    00
  • JVM中对象的创建与OOP-Klass模型

    一、JVM中对象的创建 在Java中,对象的创建过程必须经过如下步骤: JVM读入指定类的二进制数据,并在方法区中生成类模板,同时为类变量和静态变量分配内存空间; JVM在堆上分配实际的对象空间,同时根据不同的访问控制权限设置对象的内部成员; 在对象空间中执行实例方法时,虚拟机通过对象的指针调用相应方法。 二、OOP-Klass模型 OOP-Klass模型是…

    Java 2023年5月26日
    00
  • Java中的Spring框架是什么?

    Spring框架是Java领域一种非常流行的开源框架,它提供了一种全面的解决方案,用于构建企业级Java应用程序,以保证高效性和易扩展性。 Spring框架有以下主要特点:- 轻量级:Spring框架通过依赖注入和切面编程来实现低耦合和高内聚,从而保证不会增加程序的负担和复杂度。- 容器化:Spring框架提供了一个核心容器,即Spring容器,它利用Jav…

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