说明:当项目中存在异常(已知异常、未知异常)时,需要对异常信息封装返回给前端,可以做一个统一异常处理,对于各个异常返回不同的信息。
Result类(统一响应结果)
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 统一响应结果
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {
/**
* 响应码,1 代表成功; 0 代表失败
*/
private Integer code;
/**
* 响应信息 描述字符串
*/
private String msg;
/**
* 返回的数据
*/
private Object data;
/**
* 增删改 成功响应
*
* @return
*/
public static Result success() {
return new Result(1, "success", null);
}
/**
* 查询 成功响应
*
* @param data
* @return
*/
public static Result success(Object data) {
return new Result(1, "success", data);
}
/**
* 失败响应
*
* @param msg
* @return
*/
public static Result error(String msg) {
return new Result(0, msg, null);
}
}
准备工作
在Controller层中创建两个异常方法,方法内分别存在算数异常、数组越界异常
@RestController
public class ExceptionController {
/**
* 算术异常
*/
@RequestMapping("/ex01")
public void exception01(){
int i = 1/0;
}
/**
* 数组越界异常
*/
@RequestMapping("/ex02")
public void exception02(){
int[] arr = new int[5];
System.out.println(arr[7]);
}
}
统一异常
创建一个异常处理类,对数组越界异常返回“数组越界异常”信息,对其他异常返回“发生了未知错误,请稍后来访问…”
@RestControllerAdvice注解,表示该类是一个返回通知类,参考:http:///YTqva;
@ExceptionHandler()注解,表示该方法用于处理某异常,括号内填异常类;
import com.test.utlis.Result;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
/**
* 统一异常处理
*/
@RestControllerAdvice
public class UnifyExceptionHandler {
/**
* 数组越界异常
*/
@ExceptionHandler(ArrayIndexOutOfBoundsException.class)
public Result arithmeticException(ArrayIndexOutOfBoundsException aioobe){
// 打印异常信息到控制台
aioobe.printStackTrace();
// 将错误信息封装成统一Result对象返回
return Result.error("数据越界异常....");
}
/**
* 所有异常
*/
@ExceptionHandler(Exception.class)
public Result AllException(Exception e){
// 打印异常信息到控制台
e.printStackTrace();
// 将错误信息封装成统一Result对象返回
return Result.error("发生了未知错误,请稍后来访问....");
}
}
运行,分别访问ex01,ex02,查看返回信息
(ex01)
(ex02)
(同时,控制台打印异常信息,方便排查)
总结
使用统一异常处理,可以针对项目中的异常返回自己提前准备好的异常信息,使系统对于用户更加友好。