SpringBoot
异常响应的处理
一、前言
-
在前后端交互的模式中,前后端会统一规范返回数据的格式。但在生产环境中,由于系统异常或bug的原因可能会产生异常,导致无法返回规定的格式数据。
-
SpringBoot中规范数据的一个例子
定义
R
类统一数据返回的格式@Data public class R { private Boolean flag; private Object data; private String msg; public R(Boolean flag) { this.flag = flag; } public R(Boolean flag, Object data) { this.flag = flag; this.data = data; } }
// 在controller中 @GetMapping public R getAll() { return new R(true, bookService.list()); }
-
根据R类返回规范数据
{ "flag": true, "data": [ { "id": 1, "type": "java后端", "name": "疯狂的SpringBoot讲义", "description": "SpringBoot终极讲义" }, ], "msg": null }
二、@RestControllerAdvice
异常处理
@RestControllerAdvice
注解异常处理类。@ExceptionHandler
注解异常处理函数,根据异常类型进行处理,可以在异常处理函数内完成记录日志,通知管理员等操作。
@RestControllerAdvice
public class ProjectExceptionAdvice {
@ExceptionHandler
public R doException(Exception e) {
// 纪录日志、通知等
e.printStackTrace();
return new R("系统异常"); // 按照规范格式返回数据
}
}