下面是关于“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技术站