/**
* 业务状态码-枚举值类
* 作用: 当需要认为传入数值参数代表某些状态时, 可以用枚举进行规定范围,避免乱填入
* 每一个枚举值相当于调用的 构造方法
* */
public enum ServiceCode {
/**
* 操作成功
* */
OK(20000),
/**
* 错误:数据不存在
*/
ERROR_NOT_FOUND(40400),
/**
* 错误:数据冲突
*/
ERROR_CONFLICT(40900),
/**
* 错误:数据冲突
*/
ERROR_UNKNOWN(99999);
private Integer value;
ServiceCode (Integer value){
this.value=value;
}
public Integer getValue() {
return value;
}
}
// 全局统一响应类型
// 当在Controller中需要返回此类型时, 我们可以在此类中自定义静态方法用于Controller调用
public class JsonResult{
// 响应业务的状态码值
private Integer state;
// 操作失败时的描述信息
private String message;
// 操作成功时的响应数据
private Object data;
public static JsonResult ok(Object data){
JsonResult jsonResult = new JsonResult();
jsonResult.setState(ServiceCode.OK.getValue());
jsonResult.setData = data;
return jsonResult;
}
public static JsonResult fail(ServiceException e){
return fail(e.getServiceCode(),e.getMessage);
}
public static JsonResult fail(ServiceCode serviceCode,String message){
JsonResult jsonResult = new JsonResult();
jsonResult.setState(ServiceCode.getValue());
jsonResult.setMessage(message);
return jsonResult;
}
}
// 全局异常处理器
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler
public JsonResult handleServiceException(ServiceException e){
return JsonResult.fail(e);
}
@ExceptionHandler //此注解可以有多个异常属性, 形参处只需写共同的父类异常即可
public JsonResult handleThrowable(Throwable e){
String message = "服务器忙,请稍后再次尝试!(开发过程中,如果看到此提示,请检查控制台的信息,并补充处理异常的方法)";
// String message = "服务器忙,请稍后再尝试!"; // 项目上线时应该使用此提示文本
e.printStackTrace(); // 打印异常的跟踪信息,主要是为了在开发阶段更好的检查出现异常的原因
return JsonResult.fail(ServiceCode.ERROR_UNKNOWN , message);
}
}