1:先创建一个exception包
2:命名为GlobalExceptionHandler的class文件
现在class文件使用注解将它标识为获取controllerAdvice来交给容器管理
然后再创立一个result包 创建一个result类用来返回信息
再class文件中先定义继承 Serializable
先定义 返回码 code 返回信息msg 以及一个返回值data对象
定义成功返回值和未成功返回值
总体文件为
@Data
public class Result<T> implements Serializable {
private Integer code;
private String msg;
private T data;
public static <T> Result<T> success(T data){
Result<T> result = new Result<T>();
result.setCode(200);
result.setMsg("success");
result.setData(data);
return result;
}
public static <T> Result<T> error(String msg){
Result<T> result = new Result<>();
result.setCode(500);
result.setMsg(msg);
return result;
}
}
返回到拦截器文件中
加入ExceptionHandler注解引入类SQLIntegrityConstraintViolationException.class
再加入@ResponseBody注解
将Result方法创建出来 定义SQLIntegrityConstraintViolationException 命名为ex
在方法中定义message信息用ex获取信息,
加一个逻辑判断如图所示
其中紫色的为自定义常量,使其编码更规范
如图所示
拦截器完整代码为
ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(SQLIntegrityConstraintViolationException.class)
@ResponseBody
public Result handleSqlException(SQLIntegrityConstraintViolationException ex) {
String message = ex.getMessage();
if (message.contains("Duplicate entry")){
String[] split =message.split(" ");
String msg = split[2].substring(0,split[2].length()-1)+MessageConstant.ALERADY_EXISTS;
return Result.error(msg);
}
// 假设Result是一个自定义的返回结果类,需确保其已定义
return Result.error("服务器异常");
}
}