一、背景简介
在SpringBoot的应用开发过程中,异常处理显得尤为关键。当系统运行出现意外情况时,能够及时捕获异常、快速定位问题和提供友好的提示信息,是系统健壮性和用户体验的保障。本文将介绍如何使用SpringBoot实现全局异常处理并自定义异常类,帮助开发人员快速高效地处理异常信息。
二、目标
实现全局异常处理,处理系统的所有异常,包括运行时异常和非运行时异常,并且能够自定义异常类,将不同类型的异常进行归类。
三、实现步骤
- 创建自定义异常类
public class MyException extends RuntimeException {
private Integer code;
private String message;
public MyException(ResultCodeEnum resultCodeEnum) {
this.code = resultCodeEnum.getCode();
this.message = resultCodeEnum.getMessage();
}
public Integer getCode() {
return code;
}
public String getMessage() {
return message;
}
}
- 创建全局异常处理类
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseBody
public Result handleException(Exception e) {
if (e instanceof MyException) {
MyException myException = (MyException) e;
return Result.fail(myException.getCode(), myException.getMessage());
}
return Result.fail(ResultCodeEnum.SYSTEM_ERROR.getCode(), ResultCodeEnum.SYSTEM_ERROR.getMessage());
}
}
- 配置自定义异常类
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/test")
public Result test() {
throw new MyException(ResultCodeEnum.PARAM_ERROR);
}
}
四、效果演示
在访问 /api/test 接口时,会抛出 MyException 异常,然后由全局异常处理类捕获异常并处理,最终返回如下JSON格式的响应体:
{
"code": 400,
"message": "参数错误"
}
五、进阶拓展
除了自定义异常类、全局异常处理类以外,我们也可以在异常处理类中添加更多的异常处理方法,处理不同类型的异常。例如,我们可以添加一个 NullPointException 的处理方法:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseBody
public Result handleException(Exception e) {
if (e instanceof MyException) {
MyException myException = (MyException) e;
return Result.fail(myException.getCode(), myException.getMessage());
}
return Result.fail(ResultCodeEnum.SYSTEM_ERROR.getCode(), ResultCodeEnum.SYSTEM_ERROR.getMessage());
}
@ExceptionHandler(NullPointerException.class)
@ResponseBody
public Result handleNullPointerException(NullPointerException e) {
return Result.fail(ResultCodeEnum.NULL_POINTER_ERROR.getCode(), ResultCodeEnum.NULL_POINTER_ERROR.getMessage());
}
}
这样,当系统出现 NullPointerException 异常时,全局异常处理类会自动捕获异常并调用对应的处理方法进行处理。
六、实战示例
以下是一个基于SpringBoot实现全局异常处理及自定义异常类的示例项目:
https://github.com/linlinjava/litemall/blob/master/litemall-core/src/main/java/org/linlinjava/litemall/core/util/ResponseUtil.java
https://github.com/linlinjava/litemall/blob/master/litemall-core/src/main/java/org/linlinjava/litemall/core/exception/GlobalExceptionAdvice.java
七、总结
本文介绍了使用SpringBoot实现全局异常处理及自定义异常类的攻略,其中包含了详细的步骤和示例,并对如何进一步拓展进行了说明。异常处理虽然看似简单,但实际上却是系统开发中非常重要的一环。希望本文能够帮助读者更好地掌握异常处理的相关知识。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot实现全局异常处理及自定义异常类 - Python技术站